2017-08-09 145 views
1

我有一個mysql數據庫。 我在這個數據庫中創建了一個包含帖子的表格。從MYSQL數據庫中選擇子記錄的有效方法

表有以下幾列:

p_id (primary key), post_header, creation_date, post_body, r_id, u_id 

所以每個記錄代表後。

r_id引用p_id,當它不爲空時,表示它是對該p_id(或帖子ID)的回覆。

我的問題是,我想要一個單一的查詢來抓住所有的帖子,並對每個帖子下的所有帖子進行分組。

示例結果集:

Result Set

所以基本上我要尋找的查詢,可以通過創建日期倒序我通過創建日期遞減,並且還巢的答覆下方還全球職位順序。

我嘗試使用GROUP BY函數是這樣的:

SELECT * FROM global_post group by r_id order by creation_date desc; 

,但它不工作,雖然。有沒有一種機制可以像這樣對記錄進行分組?

我不希望有子查詢每個樁

+0

你幾乎在那裏,可以考慮看'groub by'子句。這應該對你有所幫助。 – Alam

+0

我在使用的查詢中犯了一個錯誤。請參閱我的編輯,TN我試過的查詢是'SELECT * FROM global_post group by r_id order by creation_date desc;'我認爲這樣做會訣竅,但是當我這樣做時,我錯過了所有行。它看起來不正確。 – SanzioSan

回答

0

GROUP BY用於聚合數據,這是不是你想要的。

嘗試按coalesce(r_id, p_id)排序,這將使全球職位與他們的子女具有相同的順序。然後添加第二個將global_post置於case語句頂部的順序。

select * from global_post 
order by coalesce(r_id, p_id) desc, 
case when r_id is null then 0 else 1 end, creation_date desc 
+0

這與我所需要的非常接近,但是當我嘗試通過creation_date desc來排序此查詢時,它會中斷順序。我試過:'select * from global_post order by coalesce(r_id,p_id),當r_id爲null的情況下,然後0 else 1 end,creation_date desc' – SanzioSan

+1

這個查詢將我引向正確的答案。要按desc排序,我必須在合併函數之後放置desc,並在結尾處輸入:'select * from global_post by coalesce(r_id,p_id)desc,r_id爲null時的情況,否則爲0 else 1 end,creation_date desc' – SanzioSan

0

您可以通過部分嘗試級的伎倆

order by Case when r_id is null then p_id else r_id end 
+0

它沒有工作,無論何時我使用'group by r_id',它將結果集限制爲2/17記錄,出於某種原因... – SanzioSan

+0

我不相信你需要一組。這主要是訂單問題。 – Tlivanios

相關問題