2013-07-04 26 views
-3

我存儲線程的論壇,其父/子關係的數據進行排序:如何選擇和緊跟着的父/子關係

CREATE TABLE forum_threads (
    thread_id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, 
    parent_id INTEGER UNSIGNED NOT NULL DEFAULT 0, 
    topic_id INTEGER UNSIGNED NOT NULL, 
    user_id INTEGER UNSIGNED NOT NULL, 
    title VARCHAR(100) NOT NULL, 
    body TEXT NOT NULL, 
    create_date DATETIME NOT NULL, 

    PRIMARY KEY (thread_id), 
    FOREIGN KEY (parent_id) 
    REFERENCES forum_threads(thread_id), 
    FOREIGN KEY (topic_id) 
    REFERENCES forum_topics(topic_id), 
    FOREIGN KEY (user_id) 
    REFERENCES users(user_id) 
); 

新線程具有parent_id = 0,而回復有parent_id = the thread_id being replied to

我要選擇最近更新(回答)線程,並在表中顯示的結果如下:

enter image description here

我怎樣才能做到這一點?

SELECT * FROM forum_threads 
WHERE topic_id = whatever AND parent_id = 0 
WHAT NEXT??? 

我不知道這是否可以用純SQL來完成,或者我是否應該處理與PHP的結果,或者我應該嘗試另一種方法一起?

+0

此鏈接會幫助你的一樣:http://stackoverflow.com/questions/15049133/mysql-select-only-newest-message-from- distinct-threads-order-by-timestamp-priva –

回答

0

使用下面的查詢:

SELECT * FROM forum_threads 
    WHERE topic_id = whatever AND parent_id = 0 
    ORDER BY updated_date DESC limit 1; 

這會給你最更新記錄。

+0

你在哪裏得到'updated_date'? –

+0

@mistermartin從你在result.it中顯示它的地方將在你的數據庫中。這只是我的豁免。如果您創建了日期,那麼您可以按照該字段進行排序。這是一個表字段名稱。 –

+0

'updated_date'不在我的表格中。我不想僅僅通過'create_date'命令。請重讀這個問題。 –

0

你可以簡單地做這在SQL

SELECT ft.* FROM forum_threads AS ft 
JOIN forum_threads AS ft1 ON ft.id = ft1.thread_id 
WHERE topic_id = whatever AND parent_id = 0 
ORDER BY ft.create_date DESC 
LIMIT 1 
+0

此查詢不起作用。 –

+0

你現在可以看看它嗎? ft.thread_id更改爲ft1.thread_id –