MySQL LIMIT 1 на второй таблице с INNER JOIN - PullRequest
3 голосов
/ 27 ноября 2010

Я использую этот запрос, чтобы распечатать форум и все его подфорумы.Как и следовало ожидать, происходит то, что отображаются все сообщения во всех темах этого форума.Я хотел бы, чтобы только первое сообщение из каждой темы отображалось вместе с названием форума.

Запрос:

SELECT tf_threads.*, tf_posts.* 
    FROM tf_threads INNER JOIN tf_posts 
    ON tf_threads.thread_id=tf_posts.thread_id 
        AND tf_threads.parent_id=54 ORDER BY tf_posts.date ASC

Обратите внимание, что в поле parent_id указана переменнаяв реальном запросе.

итак.Если у меня есть смысл, кто-нибудь может мне помочь, какой запрос написать, чтобы выбрать только первое сообщение из каждой темы?

Если нет простых (ish) ответов, как я могу это сделать, если я использовал поле номера поста во второй таблице, например, первое сообщение в теме имеет номер 1, второе сообщение имеет номер 2и т. д. Если я использую этот метод, я бы, очевидно, хотел бы только выбирать посты с полем счетного числа 1. Я мог бы просто расширить исходный запрос с AND post_number=1 верно?

Спасибо за чтение,

Джеймс

1 Ответ

2 голосов
/ 27 ноября 2010

Как то так?

http://murrayhopkins.wordpress.com/2008/10/28/mysql-left-join-on-last-or-first-record-in-the-right-table/

Редактировать: Я думаю, что это должно быть примерно так, но я также не эксперт по SQL:

SELECT tf_threads.*, tf_posts_tmp.*
FROM tf_threads
LEFT JOIN (SELECT p1.*
           FROM tf_posts as p1
           LEFT JOIN tf_posts AS p2
           ON p1.postid = p2.postid AND p1.date < p2.date) as tf_posts_tmp
ON (tf_threads.thread_id=tf_posts_tmp.thread_id)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...