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

时间:2012-11-11 15:45:02

标签: 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: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_id(一个唯一的用户ID)对结果进行分组,其中discount_id等于某个值,按bdate排序,我认为我需要{{} 1}} idbdate用户每次发生的值,并计算winner_id出现的次数,因此结果需要是一个值(winner_id出现次数的计数),以及3个数组(discount_id,destroy,id)..但我不知道如何以我需要的方式重新启动它。谢谢你的帮助!

1 个答案:

答案 0 :(得分:0)

两种基本方法:

  1. 在mysql中聚合,在php中“爆炸”
  2. 以PHP汇总
  3. 数字1涉及在查询中使用一些聚合函数,如COUNT()和GROUP_CONCAT():

    SELECT count(*) as num_wins, GROUP_CONCAT(discount_id, ',') as discount_ids ...
    

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

    foreach($rows as $row) {
      $discount_ids = explode(',', $row['discount_ids']);
      // ...
    }
    

    数字2更容易SQL,但更丑陋的PHP。基本上只需选择所有行,然后自己预处理结果。 (我推荐以前的解决方案)

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