По задумке есть три тарифа услуг. В карточке каждого - название, стоимость и список услуг из бд. Для "Базового" создала отдельную таблицу, чтобы понять проблему. Таблица состоит из `id`(int), `name`(text) и `price`(int). Я хочу в заголовок стоимости вывести сумму услуг из этой таблицы. Как я понимаю, нужно SUM(price) написать в запросе. Уже перепробовала разные варианты, но он не считает, выдает ошибку "Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, bool given in" на строчке "$row = mysqli_fetch_array($result);". Но ведь дальше то же самое работает. Объясните, пожалуйста, что не так? Если можно другим способом посчитать сумму, то как? PHP: <div class="price-item"> <a href="#"> <div class="price-item-title"><h1>Базовый</h1></div> <div class="price-item-title"><h4> <?php $sql = 'SELECT `id`, SUM(price) FROM bazoviy'; $result = mysqli_query($link, $sql); $row = mysqli_fetch_array($result); $sum = $row; echo $sum; ?> рублей</h4> </div> <div class="price-item-text-block"> <div class="price-item-text"> <ul> <?php $sql = 'SELECT `id`, `name`, `price` FROM bazoviy'; $result = mysqli_query($link, $sql); while ($row = mysqli_fetch_array($result)) //всё выводит без проблем { echo "<li>" . $row['name'] . "</li>"; } ?> </ul> </div> </div> </a> </div>
Запрос неправильный. С одной стороны - поле айди, а с другой стороны групповая операция. При этом group by отсутствует, так нельзя
Сделала по-другому: PHP: $sql = 'SELECT `id`, SUM(price) FROM bazoviy GROUP BY `id`'; $result = mysqli_query($link, $sql); $row = mysqli_fetch_row($result); $sum = $row; // echo $sum; if(empty($row['sum'])) echo 'Суммы нет'; else { echo 'В продаже на сумму <strong>', $row['price'],'</strong><br />'; } Выводит "Суммы нет". Понятно, что пусто. Непонятно, почему
Ну ты добавила group by - а зачем? Что вообще в таблице с непонятным названием bazoviy хранится, и зачем что-то суммируется? В принципе есть понимание, зачем группируют данные? Вот яркий пример, когда это НАДО делать: например, мы делаем что-то вроде инсты. Одни пользователи накидывают картинки (это у нас images), другие пользователи их лайкают (это у нас таблица, к примеру, likes с полями user_id, image_id). И вот теперь мы хотим посчитать, сколько лайков у какой картинки. Тогда действительно Код (Text): select image_id, count(1) as likes_count from images group by image_id Или наоборот, хотим посчитать, сколько какой юзер поставил лайков. Код (Text): select user_id, count(1) as likes_count from images group by user_id А в твоём случае, ты зачем группируешь? Как я постоянно говорю молодым программистам, которые к нам приходят в конторку, любой код должен сначала пройти через сознание. Когда я в коде подчинённого вижу тонну бреда, я ему никогда не говорю: "ты написал тонну бреда". Я его прошу объяснить мне смысл, почему оно написано так или иначе. И все знают, что не ответить мне при этом - это нарваться на неприятности.
Я поняла, что не поняла, как работать с SUM ни на примере документации, ни на примерах чьих-то кодов. Так что сделала циклом 0+значение PHP: $sql = 'SELECT * FROM bazoviy'; $query_run = mysqli_query($link, $sql); $sum= 0; while ($num = mysqli_fetch_assoc ($query_run)) { $sum += $num['price']; } echo $sum; Теперь работает
Код (Text): SELECT SUM(`price`) FROM `bazoviy` Посчитает всю колонку. Выдаст одну строку. Если сгруппируете по чем-то, то посчитает по отдельности для всего, что сгруппируете. То есть в выдаче будет более, чем одна строка.
Смотри, есть всякие системы, которые позволяют выполнять запросы прямо в БД, а не из php-кода. Ну нам близка phpmyadmin, потому что она на пыхе написана. Есть ещё подобные штуки в IDE, есть HeidiSQL, adminer и т.п. Прежде чем писать запрос в коде, полезно прогнать его там, и посмотреть, чего выдаст БД. Я это делаю регулярно, в принципе, иногда запросы там составляю, а потом уже перевожу на вызовы фреймворка. А уж если работаю без фреймворка, то тем более.