2010-02-06 67 views
0

在我的網站的主頁上,我想顯示論壇的最新帖子,但我不想兩次顯示同一主題。我如何修改下面的代碼來做到這一點?SQL-如何提取非重複的論壇主題?

http://punbb.informer.com/wiki/punbb13/integration#recent_10_posts

基本上展示了最新的帖子,但只有一次,每個論壇的主題/線程。

+1

看起來就像你正在使用自定義數據庫對象,誰知道該如何自定義數據庫對象,你正在使用的作品!在沒有看到源代碼的情況下,我們無法可靠地告訴你如何修改傳遞給build_query函數的數組,以便它生成有效的MySQL查詢。您將獲得有關如何更改查詢的響應,但除非您知道如何更改對象以獲取新查詢,否則您可能無法在此處找到合適的答案。 – 2010-02-06 18:25:04

+0

我正在使用PunBB開源php論壇應用程序。我迷茫和困惑;( – 2010-02-06 18:40:46

回答

1

如果你想每個主題只有一個值,您可以按主題分組,並從每個主題選擇最近的帖子。然後,您可以選擇前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' 
1

改變這一行

'SELECT' => 'p.id, p.message, t.subject', 

'SELECT DISTINCT' => 'p.id, p.message, t.subject', 
+0

似乎沒有工作,MySQL是否支持這一點? – 2010-02-06 18:07:10

+2

MySQL應該支持它,但這不會工作,因爲每個職位的p.id總是不同的。 – 2010-02-06 18:28:52

3

添加條件,只保留記錄中,其中後是主題中的最後一個職位:

WHERE p.id = (
    SELECT pp.id 
    FROM posts AS pp 
    WHERE pp.topic_id = t.id ORDER BY pp.posted DESC LIMIT 1 
) 
+0

我不擅長sql,所以我對這個「where」聲明在哪裏有點困惑,你可以給我完整的sql語句嗎? – 2010-02-06 18:16:56

+0

它在JOINS和ORDER BY之間是這樣的:''WHERE'=>'p .id =(...)',' – Leventix 2010-02-06 18:24:01

+0

不幸的是我不知道那個php庫是如何構造sql語句的,所以上面沒有工作,我正在使用PunBB論壇應用程序。 – 2010-02-06 20:33:33