2014-02-07 6 views
0

У меня есть две таблицы:Как заказать данные в mysql по количеству соединений?

posts : id,title,content,show,created_at 

comments: id,post_id,created_at 

Я пытаюсь заказать сообщения от самых комментировал.

SELECT *, COUNT(comments.id) AS total_comments 
FROM comments LEFT JOIN posts ON posts.id = comments.post_id 
WHERE posts.show = '1' 
GROUP BY complains.id 
ORDER BY total_comments DESC 

Проблема в том, что сообщения с 0 комментариями не отображаются. Любая помощь будет высоко оценена.

+0

Что вы спрашиваете? Как отсортировать 'count', или почему сообщения с 0 комментариями не появляются? – helion3

+4

Вам нужно «LEFT JOIN» комментировать сообщения, а не сообщения к комментариям. Таким образом, сообщения с нулевыми комментариями покажут. – Rainbolt

+0

Что жалуется? Это должно читать комментарии? – dave

ответ

2

С вашим соединением выше вы ошибочно присоединяетесь, чтобы получить коммену, у которой есть сообщения Вы должны были сделать правильное соединение или обменять таблицы в левом соединении, как показано ниже.

Select *, COUNT(comments.id) as total_comments 
FROM posts 
LEFT outer JOIN comments on posts.id = comments.post_id 
WHERE posts.show = '1' 
GROUP BY posts.id 
ORDER BY total_comments DESC 
1

Вам нужно сделать ПРАВИЛЬНОЕ ОБЪЕДИНЕНИЕ вместо ЛЕВОЙ ВСТУПЛЕНИЯ. Или замените таблицы в разделе LEFT JOIN.

+1

+1 для объяснения проблемы и НЕ выписывания решения для него. К сожалению, Нихат просто сделал домашнее задание для него без унции объяснения. – Rainbolt

+1

Я новый, как вы видите из моего профиля. В следующий раз я сделаю лучше. Спасибо за комментарий. – Nihat

+1

@Nihat Путь, чтобы быть мужчиной. Теперь я чувствую себя рывком! Мы все здесь, чтобы помочь людям в конце. Я искренне извиняюсь за свой грубый комментарий. – Rainbolt

1

Хотя есть много способов решить эту проблему, я думаю, что этот код легко читать и понимать.

Запрос в LEFT JOIN можно скопировать и запустить самостоятельно, чтобы помочь отладить. Затем вы присоединяете этот результат к таблице сообщений и заказываете результаты.

SELECT p.*, IFNULL(c.total_comments, 0) as total_comments 
FROM posts p 
LEFT JOIN (select post_id, count(post_id) as total_comments from comments group by post_id) as c ON p.id = c.post_id 
WHERE p.show = '1' 
ORDER BY c.total_comments DESC 
Смежные вопросы