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

having count(count)<>0
...
Рейтинг: 0 / 0
21.10.2016, 14:40
    #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
21.10.2016, 14:57
    #39331633
982183
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не возвращать пустую строку
В любом случае или having, или delete
...
Рейтинг: 0 / 0
21.10.2016, 15:32
    #39331684
IceElect
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не возвращать пустую строку
982183,

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

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


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

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

Добавил having c.id <> ''
Получилось, спасибо
...
Рейтинг: 0 / 0
21.10.2016, 17:21
    #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
21.10.2016, 17:25
    #39331826
alex564657498765453
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не возвращать пустую строку
alex564657498765453,

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

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

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

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

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

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


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