如何使用PHP从MYSQL中选择特定行?
我有一个聊天应用程序,我正在使用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
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显示实时结果
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;");