限制mysql中每个匹配字段返回的结果数

时间:2014-10-15 13:31:58

标签: mysql limit concat

我试图编写一个在组concat中返回固定数量结果的查询。我不认为群组连续可能,但我无法弄清楚要添加哪种子查询。

这是我想做的事情:

查询

select id,
group_concat(concat(user,'-',time) order by time limit 5)
from table
where id in(1,2,3,4)
group by 1

当我删除"限制5"从小组concat,查询工作,但吐出太多的信息。

我打开以不同方式构建查询。查询的用户将提供特定的ID号,并且对于指定的每个ID,我想列出固定数量的结果。如果有更好的方法可以让我知道。

1 个答案:

答案 0 :(得分:0)

不确定您想要的确切结果集,但请查看此SO帖子: How to hack MySQL GROUP_CONCAT to fetch a limited number of rows?

作为另一个例子,我尝试了链接中提供的查询/解决方案并提出了这个:

SELECT user_id, SUBSTRING_INDEX(GROUP_CONCAT(DISTINCT date_of_entry),',',5) AS logged_dates FROM log GROUP BY user_id;

返回: user_id | logged_dates 1 | "2014-09-29,2014-10-18,2014-10-05,2014-10-12,2014-10-19" 2 | "2014-09-12,2014-09-03,2014-09-23,2014-09-22,2014-10-13" 3 | "2014-09-10" 6 | "2014-09-29,2014-09-27,2014-09-26,2014-09-25" 8 | "2014-09-26,2014-09-30,2014-09-27" 9 | "2014-09-28" 13 | "2014-09-29" 22 | "2014-10-12"

上述查询将返回已记录内容的每个用户ID,以及用户已记录的最多5个日期。如果您想从组concat中获得更多或更少的结果,只需更改查询中的数字5即可。

跟进,并将我的查询与你的查询合并,我得到:

SELECT user_id, SUBSTRING_INDEX(GROUP_CONCAT(date_of_entry ORDER BY date_of_entry ASC),',',3) AS logged_dates FROM log WHERE user_id IN(1,2,3,4) GROUP BY user_id

哪个会返回(注意我更改了group_concat返回的结果数): user_id | logged_dates 1 | "2014-09-16,2014-09-17,2014-09-18" 2 | "2014-09-02,2014-09-03,2014-09-04" 3 | "2014-09-10"