這應該是發佈給他們的新附件的主題列表。查詢不工作需要在groupby之前orderby?
此查詢中的group by
未按我的意願工作。 (它是SMF。) 它應該從每個具有最新附件的線程中提取一個代表性附件 - 不僅僅是新線程,而是任何線程。結果將是一個鏈接到相應新圖像發佈的線索的縮略圖。
相反,它不起作用。目前它有兩個問題。第一個問題是它顯示線程中的第一個附件,而不是最近的附件。第二個問題是它通過線程創建日期進行排序。我希望附件創建日期成爲訂單,並根據哪些線程具有最新附件對線程列表進行排序。因此,即使有最近的附件,舊線程也不會升至頂端。我需要先選擇一個子選擇嗎?我該如何做這項工作?
非常感謝你提前。
SELECT *
FROM smf_attachments AS att
INNER JOIN smf_messages AS m ON (m.id_msg = att.id_msg)
INNER JOIN smf_topics AS t ON (t.id_topic = m.id_topic)
LEFT JOIN smf_members AS mem ON (mem.id_member = m.id_member)
LEFT JOIN smf_attachments AS thumb ON (thumb.id_attach = att.id_thumb)
WHERE att.attachment_type = 0
AND t.id_board = 3
GROUP BY t.id_topic
ORDER BY att.id_attach DESC
LIMIT 2
(編輯。)
假設我們有三個topic_id每5個附件。較高的附件編號意味着它是一個較新的附件,而較高的附件編號意味着它是一個較新的主題。
topic_id 1|attachment 3,6,13,14,15
topic_id 2|attachment 1,2,4,5,12
topic_id 3|attachment 7,8,9,10,11
在上述情況下,查詢應該拉2條(限2):
topic_id attachment
-------- ----------
1 15
2 12
因爲我只希望每個主題1個附件,2個主題與最新的附件是話題1和2(分別附件15和12)。儘管主題3更近,但在這種情況下它不會是一個結果,因爲它的附件比較老。
(編輯。)
我試圖通過systemmatrix所提供的解決方案,但它仍然通過topic_id創建日期,而不是其主題包含最新的附件排序。我試圖讓上面的問題更清楚。任何幫助?先謝謝你。
(編輯) 我現在看到它按照每個主題中第一個附件的日期進行排序。主題由最近的第一個附件。我需要使用最新附件或上次附件的主題
編輯 我做了一個更改,它提供了正確的主題列表。這是新的代碼。
SELECT att.id_thumb, att.id_msg, att.attachment_type, att.id_attach, distinct on (t.id_topic)
FROM smf_attachments AS att
INNER JOIN smf_messages AS m ON (m.id_msg = att.id_msg)
INNER JOIN smf_topics AS t ON (t.id_topic = m.id_topic)
LEFT JOIN smf_members AS mem ON (mem.id_member = m.id_member)
LEFT JOIN smf_attachments AS thumb ON (thumb.id_attach = att.id_thumb)
WHERE att.attachment_type = 0
AND t.id_board = 3
ORDER BY max(att.id_attach) DESC
LIMIT 2
現在唯一的問題是我如何才能讓它顯示正確的縮略圖附件?它仍然在各自的主題中顯示第一個附件,而不是最後一個。任何幫助? 預先感謝您。
工作在MySQL或SQL? – 2014-08-28 04:56:42
嘿約翰遜賈森,我已經介紹了一個,相當長的鏡頭,猜測我的編輯(SMF是簡單論壇機器),請你驗證一下(或者看看我對你的帖子做了什麼)?根據需要隨意編輯/回滾。 – 2014-08-28 06:22:39
無論如何,這看起來像是一個典型的最大的N組問題,並且我已經添加了相應的標籤來對您的問題進行分類。你可以看看[其他問題標籤爲'mysql' +'最大的每個組],(你可能會遇到這樣的問題)在其中的一些中找到你的解決方案。 – 2014-08-28 06:26:48