powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Не возвращать пустую строку
14 сообщений из 14, страница 1 из 1
Не возвращать пустую строку
    #39331144
IceElect
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть запрос вроде SELECT *, COUNT(DISTINCT id) as count FROM ... WHERE ... ORDER BY ...
И он в любом случае возвращает хотя бы пустую строку, где count = 0
Как можно это поправить?
...
Рейтинг: 0 / 0
Не возвращать пустую строку
    #39331145
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Приведите пожалуйста пример первичных даных.
Пока не понятно.
Вы просите показать то, чего нет.
Возможно ли это?
+ COUNT Возвращает количество элементов в группе
А группировки у вас не видно.
...
Рейтинг: 0 / 0
Не возвращать пустую строку
    #39331147
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сорри. У вас distinct
Так что в любом случае у вас будет только одна строка с цифрой равной количеству уникальных ID.
0 это именно такая цифра.
...
Рейтинг: 0 / 0
Не возвращать пустую строку
    #39331148
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
delete вам в помощь.
...
Рейтинг: 0 / 0
Не возвращать пустую строку
    #39331151
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
или

having count(count)<>0
...
Рейтинг: 0 / 0
Не возвращать пустую строку
    #39331602
IceElect
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
982183,

Ну у меня всё немного сложнее...

Мой запрос:

SELECT c.*,u.fname,u.lname,u.last_action,u.id AS author,
count(DISTINCT l.id) as likes_count,
count(DISTINCT liked.id) as is_liked,
count(DISTINCT disliked.id) as is_disliked,
count(DISTINCT dl.id) as dislikes_count
FROM ".$this->config['dbprefix']."comments c
LEFT JOIN users u ON(u.id = c.author)
LEFT JOIN likes l ON(l.item = c.id AND l.type = 'comment' AND l.value = 0)
LEFT JOIN likes liked ON(liked.item = c.id AND liked.type = 'comment' AND liked.value = 0 AND liked.author = ".$this->userid.")
LEFT JOIN likes dl ON(dl.item = c.id AND dl.type = 'comment' AND dl.value = 1)
LEFT JOIN likes disliked ON(disliked.item = c.id AND disliked.type = 'comment' AND disliked.value = 1 AND disliked.author = ".$this->userid.")
WHERE c.item = $id AND c.type = 'post' AND deleted = 0
ORDER BY c.date ASC

Это получение комментариев к посту, он в любом случае выдаёт мне хотя бы один комментарий, если их на самом деле нет, то он возвращает одну пустую строку, где все коунты равны 0. Что делать?
...
Рейтинг: 0 / 0
Не возвращать пустую строку
    #39331633
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В любом случае или having, или delete
...
Рейтинг: 0 / 0
Не возвращать пустую строку
    #39331684
IceElect
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
982183,

А delete зачем? Как его можно тут применить? having не подходит, т.к. спокойно может быть комментарий, без лайков и дизлайков.
...
Рейтинг: 0 / 0
Не возвращать пустую строку
    #39331793
alex564657498765453
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IceElect982183,

А delete зачем? Как его можно тут применить? having не подходит, т.к. спокойно может быть комментарий, без лайков и дизлайков.


having подходит, просто применить его надо - это фильтрация после выборки(после работы селект строки) (выполнение запроса грубо говоря 1-фром=создание источника данных 2-веар=фильтр данных 3 груп бай - групирование данных 4 селект - выбор для строк/груп данных результатов 5 ордер бай - сортировка результата, 6 хевинг - перед посылкой каждой итоговой строки клиенту дополнительная проверка.

если вам надо выкинуть строчки из результата селект..... , то это как раз секция хевинг, если нет возможности модифицировав запрос от них избавится
...
Рейтинг: 0 / 0
Не возвращать пустую строку
    #39331810
IceElect
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alex564657498765453,

Добавил having c.id <> ''
Получилось, спасибо
...
Рейтинг: 0 / 0
Не возвращать пустую строку
    #39331819
alex564657498765453
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IceElect982183,

Ну у меня всё немного сложнее...

Мой запрос:

SELECT c.*,u.fname,u.lname,u.last_action,u.id AS author,
count(DISTINCT l.id) as likes_count,
count(DISTINCT liked.id) as is_liked,
count(DISTINCT disliked.id) as is_disliked,
count(DISTINCT dl.id) as dislikes_count
FROM ".$this->config['dbprefix']."comments c
LEFT JOIN users u ON(u.id = c.author)
LEFT JOIN likes l ON(l.item = c.id AND l.type = 'comment' AND l.value = 0)
LEFT JOIN likes liked ON(liked.item = c.id AND liked.type = 'comment' AND liked.value = 0 AND liked.author = ".$this->userid.")
LEFT JOIN likes dl ON(dl.item = c.id AND dl.type = 'comment' AND dl.value = 1)
LEFT JOIN likes disliked ON(disliked.item = c.id AND disliked.type = 'comment' AND disliked.value = 1 AND disliked.author = ".$this->userid.")
WHERE c.item = $id AND c.type = 'post' AND deleted = 0
ORDER BY c.date ASC

Это получение комментариев к посту, он в любом случае выдаёт мне хотя бы один комментарий, если их на самом деле нет, то он возвращает одну пустую строку, где все коунты равны 0. Что делать?

ну во первых

если вам надо количество по критериям, и количество по критериям + 1 критерий
ничкчему делать лишний джоин
LEFT JOIN likes l ON(l.item = c.id AND l.type = 'comment' AND l.value = 0)

и

LEFT JOIN likes liked ON(liked.item = c.id AND liked.type = 'comment' AND liked.value = 0 AND liked.author = ".$this->userid.")

можно в селекте написать типо
count(distinct l.id)

count(IF(u.id = $this->userid, l.id,Null))

дело втом что количество уникальных значений в списке
1 2 2 3 нулл нулл - равно 3, а не 4, - ибо нулл за значение не считается
...
Рейтинг: 0 / 0
Не возвращать пустую строку
    #39331826
alex564657498765453
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex564657498765453,

во вторых наверно лучше будет делать так

получаем список айди коментов - как временую таблицу

from
(select c.id from comments where c.item = $this->id) t

и к ней джоинить лайки и групировать, а потом к тому что получилось приджоинить
коменты с автором

можно коменты с автором выбрать отдельным запросом,
...
Рейтинг: 0 / 0
Не возвращать пустую строку
    #39332047
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IceElect982183,
А delete зачем? Как его можно тут применить?
Сформируй таблицу, а потом удали строки с count = 0
...
Рейтинг: 0 / 0
Не возвращать пустую строку
    #39332070
IceElect
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
982183,

Да не нужно мне их удалять, пост спокойно может быть без лайков, нужно удалить запись, где id пустой... Проблема уже решена выше.
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Не возвращать пустую строку
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]