Задавайте вопросы, мы ответим
Вы не зашли.
Страниц: 1
Добрый день.
Есть две таблицы "Факторы" (fakt) и "Количество голосов за тот или иной фактор" (fakt_cnt)
fakt_cnt состоит из полей fakt_id и cnt. В cnt имеем единицы и нули. (надеюсь понятно обьяснил)
1. Выводим названия факторов.
2. Выводим количество голосов по каждому фактору и сортируем так, чтобы ничего не перемешалось.
Получаем что-то вроде:
Фактор_1 5 (голосов)
Фактор_2 3
Фактор_3 2
Фактор_4 1
Фактор_5 0
Цель: не выводить Фактор_5 0 как и все остальные нулевые значения
Что у меня получилось за 4 часа мучений:
1. Количество голосов выводит корректно (тут спасибо PHP)
Отредактированно Doxtor (14.04.2011 15:30:15)
Неактивен
Кажется, у вас проблема в клиентском коде (т.е. PHP), а не в запросе (хотя вообще-то, если вы не хотите нулевых значений — просто добавьте в конец запроса HAVING(SUM(..) > 0), тогда сервер сам вас от них избавит).
Давайте я вам посоветую крошечную библиотечку, которая вам сильно облегчит жизнь. Вот: http://webew.ru/articles/3237.webew
С ней ваш код станет вот таким (я туда добавил использование пседвонимов колонок (это когда добавляется AS и что-то еще), чтобы имена столбцов покороче были):
Неактивен
Для того чтобы полностю понять:
Неактивен
Скорее всего, какая-то ошибка в запросе (mysql_query никаких сообщений при этом не генерирует).
Попробуйте $result_fakt = mysql_query(...) OR die(mysql_error());
Неактивен
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'HAVING SUM(fakt_cnt.cnt) > 0' at line 5
На всякий случай:
БД-Версия 5.1.54
MySQL-Client-Version: 5.1.39
Что делать?
Отредактированно Doxtor (14.04.2011 17:38:34)
Неактивен
Немного разобрался:
правильный синтаксис GROUP -> HAVING -> ORDER
Неактивен
А почему Вы перестали выводить сумму, как раньше, а стали выводить
просто поле (по которому еще и не группируете)?
Неактивен
А сделайте как вы простой JOIN, а не LEFT (т.к. зачем вам записи из fakt, для которых нет записей в fakt_cnt? Так вам даже HAVING не понадобится)
Неактивен
paulus написал:
А почему Вы перестали выводить сумму, как раньше, а стали выводить
просто поле (по которому еще и не группируете)?
Добрый день.
Сумму я вывожу как и раньше, я просто те стал писать этот запрос, т.к. нашли решение, через HAVING :
Отредактированно Doxtor (18.04.2011 15:31:07)
Неактивен
LazY написал:
А сделайте как вы простой JOIN, а не LEFT (т.к. зачем вам записи из fakt, для которых нет записей в fakt_cnt? Так вам даже HAVING не понадобится)
Записи есть (итоговый запрос более обширный), я просто упростил запрос.
Неактивен
Я прошу прощения за настойчивость, и хочу повторить вопрос: неужели нельзя сделать запрос?
Неактивен
Попробуйте еще HAVING SUM(...) > 0 AND SUM(...) IS NOT NULL.
Неактивен
LazY написал:
Попробуйте еще HAVING SUM(...) > 0 AND SUM(...) IS NOT NULL.
Не до конца понял, но разобрался. Спасибо.
Запрос, который Вы предложили почему-то не работает:
Отредактированно Doxtor (20.04.2011 15:55:55)
Неактивен
Запрос, который Вы предложили почему-то не работает:
А как конкретно он не работает? В чем ошибка?
Неактивен
Выдаёт все записи.
Но мне не принципиально, главное, что общий запрос работает верно.
Спасибо.
Неактивен
Страниц: 1