以下查询返回一些行,每个行都有自己的date_created
。
SELECT *
FROM table1 l
inner join table2 d
ON d.id = l.id
WHERE l.company_id = 1
UNION ALL
SELECT *
FROM table1 l
inner join table3 p
ON p.id = l.id
WHERE p.company_id = 1
示例输出:
company_id ---- user_id ---- text ---- dateAndTime
1 ---- abc ---- hi ---- 2017-08-17 22:26:18
1 ---- def ---- hey ---- 2017-08-08 11:57:26
1 ---- abc ---- hi ---- 2017-08-08 11:55:40
1 ---- ghz ---- sup ---- 2017-07-25 16:01:34
我想要实现的目标:
我正在运行一个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实现此目的?
答案 0 :(得分:0)
将最后一个日期存储在变量中,检查每次迭代:
$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"];
}
请记住在查询中按dateAndTime对结果进行排序。
重要提示:您还需要在查询中获得DATE(dateAndTime) as date
,因为您只需按日期(而不是时间)对它们进行分组。