PHP While循环:根据日期组合数据

时间:2016-01-07 04:57:56

标签: php mysql loops while-loop merge

我有一个包含这些行的表:

rowAutoID, eventDate, eventTime, personID

包含数据样本的行的屏幕截图:http://i.imgur.com/gHumbJE.png

我想循环遍历行,并根据日期和人员ID 对项目进行分组。

这就是我目前所拥有的:

$query = "SELECT rowAutoID,eventDate,eventTime,personID FROM `PubEvent` ";
$result = mysql_query($query);

if ( $result && mysql_num_rows($result)) {
    while( $obj = mysql_fetch_array($result, MYSQL_ASSOC) ) {
        echo '<tr><td>'.$obj["eventDate"].' '.$obj["eventTime"].'</td><td>'.$obj["personID"].'</td><td>status</td></tr>';
    }
}

它给了我这个:

+---------------------+------------+--------+
| 2015/10/05 05:27:24 | 0000000011 | status |
+---------------------+------------+--------+
| 2015/10/05 05:40:24 | 0000000020 | status |
+---------------------+------------+--------+
| 2015/10/05 06:01:23 | 0000000003 | status |
+---------------------+------------+--------+
| 2015/10/05 11:49:51 | 0000000011 | status |
+---------------------+------------+--------+

因此,如果我按日期分组(时间),我正在寻找这个结果:

+-------------+------------+--------+----------+
| 2015/10/05  | 0000000011 | status | 05:27:24 |
|             |            |        | 11:49:51 |
+-------------+------------+--------+----------+
| 2015/10/05  | 0000000020 | status | 05:40:24 |
+-------------+------------+--------+----------+
| 2015/10/05  | 0000000003 | status | 06:01:23 |
+-------------+------------+--------+----------+

因此,personID 0000000011在同一日期和一个额外列上分组,我得到该日期/ personID的所有eventTime

  

注意:由于我将使用eventDate,eventTime作为状态,用户权限和其他目的的方式,我不想更改我的SQL。

2 个答案:

答案 0 :(得分:1)

使用while循环。你可以这样做。试试吧..

$query = "SELECT rowAutoID,eventDate,eventTime,personID FROM `PubEvent` ";
$result = mysql_query($query);
$new_result = array();
if ( $result && mysql_num_rows($result)) {
    while( $obj = mysql_fetch_array($result, MYSQL_ASSOC) ) {        
        $date = date("Y/m/d", strtotime($obj["eventDate"]));
        $time = date("H:i:s", strtotime($obj["eventDate"]));
        $new_result[$obj["personID"]][$date]['date'] = $date;
        $new_result[$obj["personID"]][$date]['time'] = $time;
        $new_result[$obj["personID"]][$date]['id'] = $obj["personID"];
        $new_result[$obj["personID"]][$date]['status'] = "status";
    }
}
echo "<pre>"; print_r($new_result);

希望它会有所帮助。

答案 1 :(得分:0)

GROUP_CONCATGroup By eventDate和personID一起使用将为您提供所需的输出

SELECT
  eventDate,
  personID,
  GROUP_CONCAT(eventTime SEPARATOR '\n')
FROM pubevent
GROUP BY eventDate, personID;