如何使用PHP从MYSQL中选择特定行?

如何使用PHP从MYSQL中选择特定行?,php,mysql,Php,Mysql,我有一个聊天应用程序,我正在使用PHP从MYSQL获取数据。我不知道如何用最好的方式来表达,所以我要用最好的方式来说明。下面是数据库设置的示例 数据库 ID MESSAGE DATETIME ------------------------------------------ 1 Hello1. 2019-04-23 23:04:31 1 Hello2. 2019-03-23 10:04:31 1 H

我有一个聊天应用程序,我正在使用PHP从MYSQL获取数据。我不知道如何用最好的方式来表达,所以我要用最好的方式来说明。下面是数据库设置的示例

数据库

ID       MESSAGE       DATETIME 
------------------------------------------
1        Hello1.        2019-04-23 23:04:31
1        Hello2.        2019-03-23 10:04:31
1        Hello3.        2019-04-26 22:04:31
1        Hello4.        2019-04-23 13:01:10
2        Hello5.        2019-04-09 23:04:31
2        Hello6.        2019-04-23 23:04:31
2        Hello7.        2019-04-12 23:04:12
2        Hello8.        2019-04-11 20:04:31
3        Hello9.        2019-05-18 19:04:29
3        Hello10.       2019-02-22 23:04:31
3        Hello11.       2019-03-25 23:04:30
4        Hello12.       2019-04-23 15:04:31
4        Hello13.       2019-04-10 23:04:31
5        Hello14.       2019-01-14 23:04:31
应该选择

ID       MESSAGE       DATETIME 
------------------------------------------
1        Hello3.        2019-04-26 22:04:31
2        Hello6.        2019-04-23 23:04:31
3        Hello9.        2019-05-18 19:04:29
4        Hello12.       2019-04-23 15:04:31
5        Hello14.       2019-01-14 23:04:31
我要做的是为每个不同的ID选择一个最新的ID。所以对于ID 1,我只会选择一个具有最新日期时间的ID,以此类推

mysql_query("SELECT * FROM messages WHERE ____?____ ORDER BY __?__");
所以在这种情况下,应该只有5个结果。每个id都有一个最新的日期行。任何帮助都将不胜感激。谢谢。

您需要
MAX(date)
值,但每个ID需要一个值。因为您还需要消息,该消息不会出现在
GROUP BY
子句中,所以您应该在表上向自身运行联接

在联接表中,您将获得最大日期和ID,按ID分组-这将为您提供每个ID的最高日期。在ID和日期上联接表中的ID和ID,这允许您获得
分组依据
中不存在的其他列(由于此
分组依据
在联接表中,您不需要它在主表中)

  • SQL FIDLE显示实时结果

在按ID分组之前,您可以尝试在子查询中对它们进行排序,如下所示:

SELECT * FROM (SELECT * FROM messages ORDER BY DATETIME DESC) AS sortedMessages GROUP BY ID;


或者,您可以构建包含对话的第二个表,该表中可能有一个主题和行中的最新消息,然后您只需返回完整的表,在打开对话时,您将根据对话ID从消息表中提取独立消息,所有日期时间看起来都是相同的。对于给定的
id
,如果两个或多个记录在最新的日期时间绑定,您会期望什么行为?您所说的“具有最佳日期时间”是什么意思?哪一个是最好的?不会有相同id的类似日期时间。这只是一个数据库设置的示例。当我选择时,我想选择每个id一次。我选择的ID将是具有最新日期时间的ID。
SELECT * FROM (SELECT * FROM messages ORDER BY DATETIME DESC) AS sortedMessages GROUP BY ID;
mysql_query("SELECT * FROM (SELECT * FROM messages ORDER BY DATETIME DESC) AS sortedMessages GROUP BY ID;");