获取每组分组结果的记录

时间:2015-09-01 13:42:29

标签: php mysql sql

我希望你能帮我解决问题并在循环中显示结果。

我偶然发现了几个类似的问题,例如this one,尽管我的问题有点回答,但也不是。

我有以下查询:

(SELECT  dt_id, DATE_FORMAT(dt_date, '%m-%d-%Y') as dt_date,
         dt_data, dt_bodypart, dt_wktype, dt_wkurl, dt_year,
         COUNT(*) as Total
 FROM data
 WHERE dt_year = '2015'
   and dt_username_member = 'admin'
 GROUP BY dt_date
 ORDER BY dt_date DESC
 LIMIT 0,100)
ORDER BY dt_date ASC

按日期显示行并按日期对其进行分组,因为如果同一日期出现两次,我处理结果的数组在日历中不能显示多于1个结果。我还计算每个日期的记录数。

我实际上可以通过在while循环中运行查询来使其工作(这是不好的做法)但我想避免这种情况并以更有效和更好的方式执行

无法使用此结果,因为我的数组只会在日历页面上显示一个结果(最近一个添加到数据库中):

array {
'08-26-2015' : 'something',
'08-26-2015' : 'something else',
'08-27-2015' : 'else',
}

目前我有这个但是我在while循环中运行查询,如果该日期的记录数是> 1,我想实现这个相同的结果,但没有运行查询计数>的记录一个while循环内部

array {
'08-26-2015' : 'something, something else',
'08-27-2015' : 'else',
}

1 个答案:

答案 0 :(得分:0)

经过一番挖掘,我找到了解决方案。我提出了将检索所有结果的查询,而不需要在while循环内运行查询以获取每天的所有信息。这是查询:

(SELECT DATE_FORMAT(dt_date, '%m-%d-%Y') dt_date, 
count(dt_date) as date_count,
GROUP_CONCAT(dt_data ORDER by dt_date SEPARATOR '>>') dt_data, 
GROUP_CONCAT(dt_bodypart ORDER by dt_date SEPARATOR '>>') dt_bodypart,
GROUP_CONCAT(dt_wktype ORDER by dt_date SEPARATOR '>>') dt_wktype,
GROUP_CONCAT(dt_wkurl ORDER by dt_date SEPARATOR '>>') dt_wkurl
FROM data 
WHERE dt_username_member = 'admin' and dt_year = '2015'
GROUP BY dt_date ORDER BY dt_date ASC) ORDER BY dt_date ASC

此查询会将所有信息分组到与特定日期匹配的行中,如下所示:

dt_date     |  dt_data                   |  
------------------------------------------
2015-09-03  |  something>>something else |   

所以你需要做的就是爆炸dt_data和你了。