Более простой способ использования Joins - PullRequest
0 голосов
/ 16 марта 2011

У меня есть следующие таблицы:

Автор:

id имя пользователя пароль электронной почты соль email_salt email_verified ip_address

Author_threads:

thread_id, author_id

Тема:

идентификатор, заголовок, содержимое, созданные

Метка:

id, name

Метки_тредов:

tad_id, идентификатор_треды

Я хочу выбрать последние 30 тем, их автори все их теги.Это оператор SQL, который я использую:

       SELECT thread.title, thread.id as thread_id,
       thread.content, author.username, author.id as author_id,
       GROUP_CONCAT(DISTINCT tag.name ORDER BY tag.name DESC SEPARATOR ',') AS tags
       FROM thread 
       JOIN thread_tags ON thread.id = thread_tags.thread_id
       JOIN tag ON thread_tags.tag_id = tag.id

       JOIN author_threads ON thread.id = author_threads.thread_id
       JOIN author ON author_threads.author_id = author.id

       GROUP BY thread.id DESC
       LIMIT 0, 30

Есть ли более простой способ сделать это?

Ответы [ 2 ]

0 голосов
/ 16 марта 2011

Единственный другой вариант, который у вас есть, - это использование выбора из нескольких таблиц, например,

   SELECT thread.title, thread.id as thread_id,
   thread.content, author.username, author.id as author_id,
   GROUP_CONCAT(DISTINCT tag.name ORDER BY tag.name DESC SEPARATOR ',') AS tags
   FROM thread, thread_tags, tag, author_threads, author
   WHERE thread.id = thread_tags.thread_id
       AND thread_tags.tag_id = tag.id
       AND thread.id = author_threads.thread_id
       AND author_threads.author_id = author.id
   GROUP BY thread.id DESC
   LIMIT 0, 30

Поддержка этого может зависеть от базы данных.

0 голосов
/ 16 марта 2011

Я предполагаю, что GROUP BY должен быть ORDER BY?

Кроме этого, я верю, что вы делаете это правильно, почему.

Поскольку вам нужны значения из всех таблиц, вам нужно объединить их все, что вы и сделали.

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