Как получить сумму значений строк сгруппированых по признаку?

Рейтинг: 1Ответов: 1Опубликовано: 01.05.2015

Существует таблица с такими полями и значениями:

введите сюда описание изображения

Нужно что бы алгоритм подсчитывал общее количество нагрузки(часов) по каждой группе в отдельности, и заносил эти значения в базу.

Пробывал сделать так:

$bd = mysql_query("SELECT * FROM list");
            $pr = mysql_fetch_assoc($bd);
            $ch = $ch['class'];
            while ($res = mysql_fetch_assoc($bd)) {
                if($ch == $res['class']) {
                    $ch = $res['class'];
                    $hours = $hours + $res['count_hours'];
                }
                else

Но это судя по всему не правильно.

Ответы

▲ 3
SELECT gruppa, sum(hours) as nagruzka FROM list GROUP BY gruppa

И НИЧЕГО НИКУДА ЗАНОСИТЬ НЕ НАДО!

А просто выводить эту информацию этим запросом, когда потребуется.

Эти твои постоянные переборы всей таблицы с занесением в другую - это какой-то рудимент оставшийся от бумажных технологий. Срочно от них избавляйся и купи себе книжку по SQL.

Да, и вместо mysql функций ты должен использовать PDO.

$sql ="SELECT gruppa, sum(hours) as nagruzka FROM list GROUP BY gruppa";
$res = $pdo->query($sql)->fetchAll(PDO::FETCH_KEY_PAIR);

Этот код вернет тебе желаемый массив $res, в котором ключами будут названия групп, а значениями - их суммы часов.

PDO бояться не надо, надо просто выучить. Вот хорошее руководство, http://phpfaq.ru/pdo
Из него видно, работать с ПДО не сложнее, чем с функциями mysql, особенно учитывая, что ты их толком все равно освоить не успел.