【发布时间】:2017-08-05 04:33:37
【问题描述】:
我有一张类似的桌子
id message state timestamp
1 abcd Heartbeat 1970-01-01 01:00
2 efgh Start 1970-01-01 02:00
3 sdcvsd Stop 1970-01-01 02:30
4 efgh Start 1970-01-01 03:00
5 sdcvsd Stop 1970-01-01 03:30
6 dsdfsd Heartbeat 1970-01-01 04:10
7 sdcsc Heartbeat 1970-01-01 04:20
8 sewwdf Heartbeat 1970-01-01 04:30
我想做的是用PHP查询这个表并显示行,但只显示Heartbeat的最新行,因为它非常重复,我只需要知道最后一次发生的时间。所有其他状态都会回显,即使它们是重复的。所以输出将是(最新的在顶部):
8 sewwdf Heartbeat 1970-01-01 04:30
5 sdcvsd Stop 1970-01-01 03:30
4 efgh Start 1970-01-01 03:00
3 sdcvsd Stop 1970-01-01 02:30
2 efgh Start 1970-01-01 02:00
我只能把它排除在外
mysqli_query($con, " SELECT * FROM msg WHERE state <> 'Heartbeat' ORDER BY id DESC LIMIT 16 " );
我认为我不能将GROUP BY 或DISTINCT 用于多个州。
如何只查询最新的 Heartbeat 状态而不影响其他状态或删除 PHP 回显中的旧状态?
【问题讨论】:
-
mysqli_query($con, " SELECT * FROM msg GROUP BY id ORDER BY id DESC LIMIT 16" );试试这个 -
还有
1970-01-01 01:00?我觉得有什么问题吗? -
我为示例设置了日期/时间。
-
SELECT * FROM msg GROUP BY(state) HAVING timestamp = MAX(timestamp) ORDER BY id DESC LIMIT 16