СУММА всех строк из условия WHERE?

#php #mysql

#php #mysql

Вопрос:

Я пытаюсь добавить содержимое всех строк, полученных из запроса.

До сих пор я пытался:

 $totalquery = "SELECT SUM(catalogue.price) AS fCount
        FROM catalogue LEFT JOIN orders ON catalogue.plantid = orders.orderplantid
        WHERE orders.orderplantid = '$actualresult' AND orders.ordercustomerid = '$actualresult2' GROUP BY catalogue.price";
        $result3 = mysql_query($totalquery) or die ("Query failed : " . mysql_error());
        $totalresult = mysql_result($result3,0);
  

и затем повторяем $ totalresult, но проблема в том, что отображается только последнее значение, а не сумма всех выбранных значений — есть идеи о том, где я ошибаюсь?

Комментарии:

1. Если вы удалите sum инструкцию, выдает ли она все правильные строки? Учитывая, что ничего не работает, я бы предположил, что ваш оператор where работает некорректно, и что вы выбираете не те строки, которые хотите выделить.

2. происходит точно то же самое — по-прежнему выводится только последняя цена.

3. В таком случае ваши where утверждения слишком ограничительны. Работайте над их исправлением, и оператор sum должен работать просто отлично.

Ответ №1:

Удалить GROUP BY catalogue.price с конца строки; команда sum ЯВЛЯЕТСЯ одной из агрегатных функций.

Комментарии:

1. Сделали это, но все еще с тем же результатом отображения только последнего элемента.

Ответ №2:

Если группировка приводит к формированию нескольких групп, вам нужно будет извлечь строки в цикле:

 while($row = mysql_fetch_assoc($result3)) {
    $total = $row['fCount'];
    ... do something with total ...
}
  

В нынешнем виде вы извлекаете только первое суммированное значение и отбрасываете остальные.

Комментарии:

1. Я попробовал это и удалил order by (просто изменил имена переменных), поэтому мой код: while($rowtest = mysql_fetch_assoc($ result3)) { $totaltest = $rowtest[‘fCount’]; echo $ totaltest; } но он ничего не выводит?

2. возвращает последнюю строку в том виде, в каком она есть на данный момент.

Ответ №3:

скорее всего, потому, что есть несколько результатов вместо одного. и поскольку вы не перебираете массив и не сохраняете все значения для просмотра, все, что вы видите, это последнее значение результирующего набора, потому что это последнее присвоение переменной $ totalresult…

попробуйте mysql_fetch_assoc ($result3) или mysql_fetch_array ($ result3) и просмотрите результаты, чтобы получить всю возвращаемую информацию…

Комментарии:

1. Пробовал это, как предложил Марк Б, но безуспешно, есть идеи относительно того, почему?

2. попробуйте это: while($row = mysql_fetch_assoc($result3)) { foreach ($row as $key => $val) { echo "$key: $val <br />";} }

Ответ №4:

Попробуйте удалить GROUP BY инструкцию.

Кроме того, если $actualresult и $actualresult2 вводятся пользователем, обязательно экранируйте их, чтобы избежать атак с использованием SQL-инъекций:

 $totalquery= "... WHERE orders.orderplantid = '" . mysql_real_escape_string($actualresult) . "' AND orders.ordercustomerid = '" . mysql_real_escape_string($actualresult2) . "'";
  

Ответ №5:

вместо mysql_result() использования mysql_fetch_array()