Mysql присоединяется к проблеме - PullRequest
0 голосов
/ 26 августа 2011

Я использую этот запрос для выбора всех статей:

SELECT articles.*,categories.category_name,users.username,tags.tag 
FROM articles 
LEFT JOIN `categories` ON articles.category_id = categories.category_id 
LEFT JOIN `users` ON articles.author_id = users.user_id 
LEFT JOIN `tags` ON articles.article_id = tags.article_id 
ORDER BY articles.date_added DESC

У меня есть другая таблица comments, и я хочу подсчитать, сколько там комментариев, где article_id в этой таблице = article_id втаблица статей.Я пытался с COUNT, но тогда он возвращает только один результат.Как я могу сделать это одним запросом?

Ответы [ 2 ]

1 голос
/ 26 августа 2011

Вы можете использовать подзапрос в предложении SELECT:

SELECT articles.*,categories.category_name,users.username,tags.tag, (SELECT count(*) FROM comments c WHERE c.article_id = articles.article_id) as comments_count
0 голосов
/ 26 августа 2011

Как уже говорилось в arnaud576875, вы можете использовать подзапрос для извлечения сводных данных.

В вашем SQL я заметил две вещи, которые на самом деле не являются частью вопроса, но на которые стоит обратить внимание.

  • вы можете использовать псевдоним таблицы, чтобы сократить ваш SQL и сделать его более читабельным.

Так что вместо

SELECT articles.*,categories.category_name,users.username,tags.tag 
FROM articles 
LEFT JOIN `categories` ON articles.category_id = categories.category_id 
LEFT JOIN `users` ON articles.author_id = users.user_id 
LEFT JOIN `tags` ON articles.article_id = tags.article_id 
ORDER BY articles.date_added DESC

вы бы код

SELECT a.*, c.category_name, u.username, t.tag 
FROM articles a
LEFT JOIN `categories` c ON a.category_id = c.category_id 
LEFT JOIN `users` u ON a.author_id = u.user_id 
LEFT JOIN `tags` t ON a.article_id = t.article_id 
ORDER BY a.date_added DESC
  • Я бы выбрал SELECT * и выбрал только те поля, которые вы на самом деле собираетесь использовать. Это также помогает с удобочитаемостью вашего кода.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...