在mysql(+;php)中检索分组元素数组

在mysql(+;php)中检索分组元素数组,php,mysql,Php,Mysql,我需要一些关于这个问题的帮助,到目前为止我有: SELECT * FROM coupons WHERE discount_id = '1' AND client_username = 'Zara' GROUP BY winner_id 桌子是这样的 id client_username winner_id bdate discount_id destroyed 72 zara 1125405534 2012-11-11 03:

我需要一些关于这个问题的帮助,到目前为止我有:

SELECT * FROM coupons WHERE discount_id = '1' AND client_username = 'Zara' GROUP BY winner_id
桌子是这样的

id  client_username winner_id   bdate                   discount_id destroyed
72  zara            1125405534  2012-11-11 03:34:49     4            0
71  zara            1125405534  2012-11-11 03:34:43     1            0
70  zara            1125405534  2012-11-11 03:34:27     1           0
我想按
winner\u id
(它是一个唯一的用户id)对结果进行分组,其中
discount\u id
等于某个值,并按
bdate
排序,我想我需要用户每次出现的
id
destrocted
值,并计算winner\u id出现的次数,因此,结果需要是一个值(winner_id出现的次数计数)和3个数组(折扣_id、销毁、id)。。但是我不知道如何以我需要的方式来检索这个。谢谢你的帮助

两种基本方法:

  • 在mysql中聚合,在php中“爆炸”
  • PHP中的聚合
  • 第一项涉及在查询中使用一些聚合函数,如COUNT()和GROUP_CONCAT():

    然后,在PHP中,这些GROUP_CONCAT列可以“分解”为数组,同时在结果上循环:

    foreach($rows as $row) {
      $discount_ids = explode(',', $row['discount_ids']);
      // ...
    }
    
    第二个是更简单的SQL,但更丑陋的PHP。基本上只需选择所有行,然后自己对结果进行预处理。(我推荐前面的解决方案)

    foreach($rows as $row) {
      $discount_ids = explode(',', $row['discount_ids']);
      // ...
    }
    
    foreach($rows as $row) {
      $results_tree[$row['winner_id']]['num_wins']++;
      $results_tree[$row['winner_id']]['discount_ids'][] = $row['discount_id'];
      // ...
    }