如何在mySQL或PHP上根据日期对输出行进行分组?

如何在mySQL或PHP上根据日期对输出行进行分组?,php,mysql,Php,Mysql,下面的查询返回一些行,每个行都有自己创建的日期 样本输出: 我想要达到的目标: 我正在运行一个php foreach循环来显示所有这些数据。但是,在每次日期更改时,我希望显示日期,就像按设计分组一样 所以显示的输出 2017-08-17 1 ---- abc ---- hi ---- 2017-08-17 22:26:18 2017-08-08 1 ---- def ---- hey ---- 2017-08-08 11:

下面的查询返回一些行,每个行都有自己创建的日期

样本输出:

我想要达到的目标:

我正在运行一个php foreach循环来显示所有这些数据。但是,在每次日期更改时,我希望显示日期,就像按设计分组一样

所以显示的输出

2017-08-17
    1          ----  abc    ----  hi  ---- 2017-08-17 22:26:18
2017-08-08
    1          ----  def    ----  hey ---- 2017-08-08 11:57:26
    1          ----  abc    ----  hi  ---- 2017-08-08 11:55:40
2017-07-25
    1          ----  ghz    ----  sup ---- 2017-07-25 16:01:34

如何使用mySQL或PHP实现这一点?

将最后一个日期存储在变量中,每次迭代都要检查:

$q = "SELECT company_id, user_id, text, dateAndTime, DATE(dateAndTime) as date FROM   table1 l inner join table2 d ON d.id = l.id WHERE  l.company_id = 1 UNION ALL SELECT company_id, user_id, text, dateAndTime, DATE(dateAndTime) as date FROM   table1 l inner join table3 p ON p.id = l.id WHERE  p.company_id = 1";
// ...
$lastGroupDate = null;
foreach ($row as $company) {
    if ($lastGroupDate !== $company["date"]) {
        echo $company["date"]."<br>";
    }
    echo $company["user_id"]."<br>";
    // rest of fields
    $lastGroupDate = $company["date"];
}
记住在查询中按日期和时间对结果进行排序


重要提示:您还需要在查询中获取DATEdateAndTime作为日期,因为您只需要按日期而不是时间对它们进行分组。

将最后一个日期存储在变量中,在每次迭代中检查:

$q = "SELECT company_id, user_id, text, dateAndTime, DATE(dateAndTime) as date FROM   table1 l inner join table2 d ON d.id = l.id WHERE  l.company_id = 1 UNION ALL SELECT company_id, user_id, text, dateAndTime, DATE(dateAndTime) as date FROM   table1 l inner join table3 p ON p.id = l.id WHERE  p.company_id = 1";
// ...
$lastGroupDate = null;
foreach ($row as $company) {
    if ($lastGroupDate !== $company["date"]) {
        echo $company["date"]."<br>";
    }
    echo $company["user_id"]."<br>";
    // rest of fields
    $lastGroupDate = $company["date"];
}
记住在查询中按日期和时间对结果进行排序


重要提示:您还需要在查询中将DATEdateAndTime作为日期,因为您只需要按日期而不是时间对它们进行分组。

在查询中使用ORDER by DATEdateAndTime。用PHP处理其余的输出。你写过PHP代码吗?@TimBiegeleisen老实说,我有这个顺序,但是PHP部分是它缺少的。我试图做的一个想法是,从foreach循环中保存上一个日期,但它在逻辑上是站不住脚的。至少在我看来,看@EnexoOnoma,这完全正确。然后,仅当您点击日期标题更改的记录时才打印该日期标题。如果有另一个公司id具有相同的日期,那么输出设计是什么?请在查询中使用ORDER BY DateDate和Time。用PHP处理其余的输出。你写过PHP代码吗?@TimBiegeleisen老实说,我有这个顺序,但是PHP部分是它缺少的。我试图做的一个想法是,从foreach循环中保存上一个日期,但它在逻辑上是站不住脚的。至少在我看来,看@EnexoOnoma,这完全正确。然后,仅当您点击日期标题更改的记录时才打印该日期标题。如果有另一个公司id具有相同的日期,那么输出设计是什么?
$q = "SELECT company_id, user_id, text, dateAndTime, DATE(dateAndTime) as date FROM   table1 l inner join table2 d ON d.id = l.id WHERE  l.company_id = 1 UNION ALL SELECT company_id, user_id, text, dateAndTime, DATE(dateAndTime) as date FROM   table1 l inner join table3 p ON p.id = l.id WHERE  p.company_id = 1";
// ...
$lastGroupDate = null;
foreach ($row as $company) {
    if ($lastGroupDate !== $company["date"]) {
        echo $company["date"]."<br>";
    }
    echo $company["user_id"]."<br>";
    // rest of fields
    $lastGroupDate = $company["date"];
}