Это правильный метод для получения и расчета данных SQL?

Я новичок в php и sql. Сегодня я поставил себе задачу получить целочисленные значения из базы данных sql, а затем выполнить некоторые основные вычисления. Есть ли еще место, где можно сократить код, продолжая выполнять задачу, или я уже дошел до самого фундаментального уровня? И не перегружаю ли я что-либо в процессе?

Мои цели состояли в том, чтобы;

  1. Получить значения БД из столбца.
  2. Получите среднее значение из этого столбца.
  3. Затем рассчитайте новое среднее значение, исключив самые высокие и самые низкие значения.

Следующим образом моя лучшая попытка;

$con = new MySQLi('localhost', 'user', 'pass', 'db_test') ;

    $count = $con->query('SELECT COUNT(SP$) FROM `math`');
    $grp = $con->query('SELECT GROUP_CONCAT(SP$) FROM `math`');
    $min = $con->query('SELECT MIN(SP$) FROM `math`');
    $max = $con->query('SELECT MAX(SP$) FROM `math`');
    $sum = $con->query('SELECT SUM(SP$) FROM `math`');
    $avg = $con->query('SELECT AVG(SP$) FROM `math`');

    $count = $count->fetch_assoc();
    $grp = $grp->fetch_assoc();
    $min = $min->fetch_assoc();
    $max = $max->fetch_assoc();
    $sum = $sum->fetch_assoc();
    $avg = $avg->fetch_assoc();

    $count = $count['COUNT(SP$)'];
    $grp = $grp['GROUP_CONCAT(SP$)']; 
    $min = $min['MIN(SP$)'];
    $max = $max['MAX(SP$)'];
    $sum = $sum['SUM(SP$)'];
    $avg = $avg['AVG(SP$)'];

Отображение и расчеты следующим образом;

    echo "Sample Size: " . $count ."</br />";
    echo "Display Values:" . $grp ."</br />";
    echo "Sum of Values: " . $sum ."</br />";
    echo "Average: " . $avg ."</br /></br />";

    echo "Now find the new average, by excluding the highest and lowest value:";

    echo "Lowest Value: " . $min ."</br />";
    echo "Highest Value: " . $max ."</br />";

    echo "New Sum: " . ($sum - $max - $min) . "</br />";
    echo "New Average : " . (($sum - $max - $min) / ($count-2));

person noy-hadar    schedule 06.07.2014    source источник


Ответы (1)


Вы можете попробовать использовать что-то вроде этого:

$con = new MySQLi('localhost', 'user', 'pass', 'db_test');
$operations = ["count"=>'COUNT(SP$)',
    "grp"=>'GROUP_CONCAT(SP$)',
    "min"=>'MIN(SP$)',
    "max"=>'MAX(SP$)'...];

foreach($operations as $name=>$value){
    $name = ${$name};
    $name = $con->query('SELECT '.$value.' FROM `math`');
    $name = $name->fetch_assoc();
    $name = $name[$value];
}

Что было сделано, так это поместить все операции в ассоциативный массив (http://php.net/manual/en/language.types.array.php) и зациклить массив с оператором foreach.

Теперь имена переменных составляются с использованием Переменные PHP - Объединить имя переменной . Обратите внимание, что это не рекомендуется, но существует и работает.

Код не тестировался, потому что на моей машине не установлен PHP, но он должен быть действительным.

person Gabriel Cliseru    schedule 06.07.2014
comment
Так ты думаешь, я должен придерживаться того, как я это сделал? - person noy-hadar; 07.07.2014
comment
В данном контексте, поскольку вывод нельзя так хорошо параметризовать, я думаю, что оба способа одинаково хороши. Просто в одном больше текста, а в другом меньше. Вот что легко прочитать по этой проблеме: framework.zend.com/ manual/1.10/en/coding-standard.html Вас интересует эта вещь, называемая стандартом кодирования, которому должен следовать каждый PHP-программист. - person Gabriel Cliseru; 07.07.2014