#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()