我有一个包含这些行的表:
rowAutoID, eventDate, eventTime, personID
包含数据样本的行的屏幕截图:
我想循环遍历行,并根据日期和人员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。
答案 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_CONCAT
与Group By
eventDate和personID一起使用将为您提供所需的输出
SELECT
eventDate,
personID,
GROUP_CONCAT(eventTime SEPARATOR '\n')
FROM pubevent
GROUP BY eventDate, personID;