【问题标题】:PHP While loop: combine data based on datePHP While循环:根据日期组合数据
【发布时间】:2016-04-11 09:37:44
【问题描述】:

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

rowAutoID, eventDate, eventTime, personID

带有数据样本的行的屏幕截图:

我想遍历行并根据日期和 personID 对项目进行分组。

这是我目前拥有的:

$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

注意:我不想更改我的 SQL,因为我将使用 eventDate、eventTime 来表示状态、用户权限和其他目的。

【问题讨论】:

  • 尝试编辑您的 SQL 以使用 GROUP BY 子句。
  • @Joshua 我不想更改我的 SQL,因为我将使用 eventDate、eventTime 来表示状态、用户权限和其他目的。

标签: php mysql loops while-loop merge


【解决方案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);

希望它会有所帮助。

【讨论】:

  • 嗯,我知道这会导致什么,但每个 ID 只给我一次。我可以在任何一天通过同一个 PersonID 进行许多活动。
【解决方案2】:

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

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

【讨论】:

  • 这并不是我真正想要的,因为它以多种不同的方式使用 eventTime。我展示的只是一个例子。
猜你喜欢
  • 2017-06-20
  • 2017-10-08
  • 2013-11-21
  • 2014-08-22
  • 2016-03-25
  • 2017-11-03
  • 2012-02-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多