在我的網站的主頁上,我想顯示論壇的最新帖子,但我不想兩次顯示同一主題。我如何修改下面的代碼來做到這一點?SQL-如何提取非重複的論壇主題?
http://punbb.informer.com/wiki/punbb13/integration#recent_10_posts
基本上展示了最新的帖子,但只有一次,每個論壇的主題/線程。
在我的網站的主頁上,我想顯示論壇的最新帖子,但我不想兩次顯示同一主題。我如何修改下面的代碼來做到這一點?SQL-如何提取非重複的論壇主題?
http://punbb.informer.com/wiki/punbb13/integration#recent_10_posts
基本上展示了最新的帖子,但只有一次,每個論壇的主題/線程。
如果你想每個主題只有一個值,您可以按主題分組,並從每個主題選擇最近的帖子。然後,您可以選擇前10個主題。
我將它寫在SQL,您可以把那個給PHP:
SELECT p.id, p.message, o.subject
FROM
((SELECT t.id
FROM posts AS p LEFT JOIN topics AS t ON p.topic_id = t.id
GROUP BY t.id
HAVING p.posted = MAX(p.posted)) ids LEFT JOIN topics AS t ON ids.id = t.id) o
LEFT JOIN posts AS p ON o.id = posts.topic_id
ORDER BY p.posted DESC
LIMIT '0,10'
改變這一行
'SELECT' => 'p.id, p.message, t.subject',
到
'SELECT DISTINCT' => 'p.id, p.message, t.subject',
似乎沒有工作,MySQL是否支持這一點? – 2010-02-06 18:07:10
MySQL應該支持它,但這不會工作,因爲每個職位的p.id總是不同的。 – 2010-02-06 18:28:52
添加條件,只保留記錄中,其中後是主題中的最後一個職位:
WHERE p.id = (
SELECT pp.id
FROM posts AS pp
WHERE pp.topic_id = t.id ORDER BY pp.posted DESC LIMIT 1
)
我不擅長sql,所以我對這個「where」聲明在哪裏有點困惑,你可以給我完整的sql語句嗎? – 2010-02-06 18:16:56
它在JOINS和ORDER BY之間是這樣的:''WHERE'=>'p .id =(...)',' – Leventix 2010-02-06 18:24:01
不幸的是我不知道那個php庫是如何構造sql語句的,所以上面沒有工作,我正在使用PunBB論壇應用程序。 – 2010-02-06 20:33:33
看起來就像你正在使用自定義數據庫對象,誰知道該如何自定義數據庫對象,你正在使用的作品!在沒有看到源代碼的情況下,我們無法可靠地告訴你如何修改傳遞給build_query函數的數組,以便它生成有效的MySQL查詢。您將獲得有關如何更改查詢的響應,但除非您知道如何更改對象以獲取新查詢,否則您可能無法在此處找到合適的答案。 – 2010-02-06 18:25:04
我正在使用PunBB開源php論壇應用程序。我迷茫和困惑;( – 2010-02-06 18:40:46