【问题标题】:Get records for each group of grouped results获取每组分组结果的记录
【发布时间】:2015-09-01 13:42:29
【问题描述】:

我希望您能帮助我在 while 循环中查询和显示结果。

我偶然发现了几个类似的问题,例如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',
}

目前我有这个,但如果该日期的记录数> 1,我也在 while 循环中运行查询,我想达到同样的结果,但在一段时间内不对计数 > 1 的记录运行查询循环

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

【问题讨论】:

  • 真的需要 DISTINCT 吗? (让我感到困惑......)
  • 我猜不是。我更正了查询。谢谢!

标签: php mysql sql


【解决方案1】:

经过一番挖掘,我找到了解决方案。我提出了可以检索所有结果的查询,而无需在 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 并且你会的。

【讨论】:

    猜你喜欢
    • 2021-09-01
    • 1970-01-01
    • 2017-11-24
    • 2021-02-01
    • 1970-01-01
    • 2023-03-14
    相关资源
    最近更新 更多