|
|
|
Не возвращать пустую строку
|
|||
|---|---|---|---|
|
#18+
Есть запрос вроде SELECT *, COUNT(DISTINCT id) as count FROM ... WHERE ... ORDER BY ... И он в любом случае возвращает хотя бы пустую строку, где count = 0 Как можно это поправить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2016, 03:08 |
|
||
|
Не возвращать пустую строку
|
|||
|---|---|---|---|
|
#18+
Приведите пожалуйста пример первичных даных. Пока не понятно. Вы просите показать то, чего нет. Возможно ли это? + COUNT Возвращает количество элементов в группе А группировки у вас не видно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2016, 03:49 |
|
||
|
Не возвращать пустую строку
|
|||
|---|---|---|---|
|
#18+
Сорри. У вас distinct Так что в любом случае у вас будет только одна строка с цифрой равной количеству уникальных ID. 0 это именно такая цифра. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2016, 04:31 |
|
||
|
Не возвращать пустую строку
|
|||
|---|---|---|---|
|
#18+
delete вам в помощь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2016, 04:38 |
|
||
|
Не возвращать пустую строку
|
|||
|---|---|---|---|
|
#18+
или having count(count)<>0 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2016, 05:00 |
|
||
|
Не возвращать пустую строку
|
|||
|---|---|---|---|
|
#18+
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. Что делать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2016, 14:40 |
|
||
|
Не возвращать пустую строку
|
|||
|---|---|---|---|
|
#18+
В любом случае или having, или delete ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2016, 14:57 |
|
||
|
Не возвращать пустую строку
|
|||
|---|---|---|---|
|
#18+
982183, А delete зачем? Как его можно тут применить? having не подходит, т.к. спокойно может быть комментарий, без лайков и дизлайков. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2016, 15:32 |
|
||
|
Не возвращать пустую строку
|
|||
|---|---|---|---|
|
#18+
IceElect982183, А delete зачем? Как его можно тут применить? having не подходит, т.к. спокойно может быть комментарий, без лайков и дизлайков. having подходит, просто применить его надо - это фильтрация после выборки(после работы селект строки) (выполнение запроса грубо говоря 1-фром=создание источника данных 2-веар=фильтр данных 3 груп бай - групирование данных 4 селект - выбор для строк/груп данных результатов 5 ордер бай - сортировка результата, 6 хевинг - перед посылкой каждой итоговой строки клиенту дополнительная проверка. если вам надо выкинуть строчки из результата селект..... , то это как раз секция хевинг, если нет возможности модифицировав запрос от них избавится ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2016, 16:54 |
|
||
|
Не возвращать пустую строку
|
|||
|---|---|---|---|
|
#18+
alex564657498765453, Добавил having c.id <> '' Получилось, спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2016, 17:11 |
|
||
|
Не возвращать пустую строку
|
|||
|---|---|---|---|
|
#18+
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, - ибо нулл за значение не считается ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2016, 17:21 |
|
||
|
Не возвращать пустую строку
|
|||
|---|---|---|---|
|
#18+
alex564657498765453, во вторых наверно лучше будет делать так получаем список айди коментов - как временую таблицу from (select c.id from comments where c.item = $this->id) t и к ней джоинить лайки и групировать, а потом к тому что получилось приджоинить коменты с автором можно коменты с автором выбрать отдельным запросом, ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2016, 17:25 |
|
||
|
Не возвращать пустую строку
|
|||
|---|---|---|---|
|
#18+
IceElect982183, А delete зачем? Как его можно тут применить? Сформируй таблицу, а потом удали строки с count = 0 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2016, 03:21 |
|
||
|
|

start [/forum/topic.php?fid=47&fpage=89&tid=1831289]: |
0ms |
get settings: |
8ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
42ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
38ms |
get tp. blocked users: |
1ms |
| others: | 271ms |
| total: | 385ms |

| 0 / 0 |
