我想編寫一個論壇網站,我想顯示一個線程列表。每個線程應該伴隨有關於第一篇文章(線程的「頭部」)以及最後一篇文章的信息。我目前的數據庫結構如下:獲取線程中的第一個和最後一個職位
threads table:
id - int, PK, not NULL, auto-increment
name - varchar(255)
posts table:
id - int, PK, not NULL, auto-increment
thread_id - FK for threads
該表還有其他字段,但它們與查詢無關。我有興趣查詢threads
,並以某種方式JOIN
與posts
ing,這樣我就可以在單個查詢中獲得每個線程的第一個和最後一個帖子(沒有子查詢)。到目前爲止,我能夠使用多個查詢做到這一點,我已經定義了第一篇文章是幸福:
SELECT *
FROM threads t
LEFT JOIN posts p ON t.id = p.thread_id
ORDER BY p.id
LIMIT 0, 1
最後的職位是非常除了ORDER BY id DESC
相同。現在,我可以做選擇與他們的第一或最新帖子多線程,:
SELECT *
FROM threads t
LEFT JOIN posts p ON t.id = p.thread_id
ORDER BY p.id
GROUP BY t.id
但我當然不能在一次同時獲得,因爲我需要在這兩個ASC
和DESC
排序同時。
這裏有什麼解決方案?甚至可以使用單個查詢嗎?有什麼辦法可以改變我的桌子的結構以促進這一點嗎?如果這不可行,那麼您可以給我什麼提示以改善這種特定情況下的查詢性能?
您可以將這兩者聯合在一起,只要您將每個都放在'()'中,以便它的'ORDER BY'只適用於它自己。或者你可以加入一個子查詢,這將是高性能的。 –
我需要爲_each_線程獲取第一個和最後一個帖子,所以我不認爲'UNION'會做到這一點。子查詢可能會。我會等待並看到其他建議。 – Grampa