2017-08-09 136 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

相关问题