Лучший запрос MySQL для выбора нескольких строк, которые КАЖДЫЙ нуждаются в нескольких ассоциативных строках из другой таблицы - PullRequest
0 голосов
/ 11 января 2011

Мне трудно придумать, как именно сформулировать этот вопрос, поэтому приведу пример.

Допустим, пользователь запрашивает страницу, на которой будет показано несколько статей И несколькокомментарии для КАЖДОЙ из этих статей.Таким образом, вам нужно не только выбрать несколько записей статей, но и каждой из этих записей потребуется иметь несколько записей комментариев, связанных с ним.

Какой самый оптимальный запрос для этого?Спасибо.

Ответы [ 2 ]

3 голосов
/ 11 января 2011

Это не абсолютно правильно или неправильно, join вернет больший набор данных, но может получить все в одном запросе

Зависит от вашего требования, если вам просто нужно количество комментариев + идентификатор списка комментариев (для последующего использования), рассмотрите возможность использования group_concat

select 
  article.*, 
  group_concat(comment.id) as comments, 
  count(comment.id) as comments_count
from 
  article
left join comment 
on comment.article_id=article_id
group by article.id;

столбцы комментариев будут содержать все идентификаторы комментариев, а comments_count возвращает количество комментариев для каждой статьи

PS : я думаю, что более подходящим является левое соединение

1 голос
/ 11 января 2011

Вы хотите использовать INNER JOIN.

SELECT 
     article.*,
     comment.*
FROM
     article
INNER JOIN
     comment
ON
     comment.article_id = article.id

Это даст вам избыточные данные (те же данные статьи для нескольких строк), но только один оператор SQL / соединение с БД.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...