2017-02-09 77 views
2

我有一个我正在使用的php聊天系统。我遇到了一个问题,即查询语句来抓取消息,选择它们,将它们按发送到和来自的两个用户进行分组,然后输出html。PHP聊天系统MySQL数据库通过datesent sql order

现在它只是在用户去选择聊天时从第一个聊天ID开始输出到最后一个ID。

我想按照最近的最近一次聊天对它进行排序,因为从现在开始,它将从发送消息到发送消息的最后一个用户的第一个用户的顶部到底部。例如,如果“用户1”一段时间没有发送消息,即使“用户6”发送了8个新聊天,该用户将始终是查询语句要输出的第一个,“用户6”仍然是列表中最后一个选择,这应该是相反的,最新的聊天组应该显示在最上面。我只是不知道如何用我的SQL查询做到这一点。

我目前的查询语句是:

$queryall = "SELECT DISTINCT mfrom FROM chat WHERE mto='user2'"; 

我知道它的编码错误的,我想要什么,我已经尝试了很多不同的东西,似乎无法得到它做我想做的。我试过按日期排序并将它们分组,但是没有任何工作。我相信DISTINCT不允许我根据我不熟悉的语法来做它。

mysql database row

User2 chat view

+0

你给这里环境而言,几乎没有。专注于**代码**,而不是传达演示文稿的图像。另外[SQL Server](https://www.microsoft.com/en-ca/sql-server/sql-server-2016)是Microsoft的产品,与MySQL无关。 – tadman

+0

感谢您对标签的建议。至于代码,这是不需要的,因为sql语句完成所有工作。您正在寻找的代码我认为是以HTML格式输出的代码,与从sql数据库中获取信息无关。上下文在描述中。我需要修正我的查询语句,以便抓取最近发送的所有用户聊天内容。如果用户一周前发送了聊天,并且用户6刚刚发送了聊天,则用户6应该在输出中出现在用户1上方,如上所述。 –

+0

在这个问题中有很多词汇,并且没有太多代码,也没有问题,据我所知。你能把它煮成更小的东西吗? – tadman

回答

2

你只需要一个简单的ORDER BY

$queryall = "SELECT DISTINCT mfrom FROM chat WHERE mto='user2' ORDER BY datesent DESC"; 

这令你的结果通过datesentDESC(降序)设置(最新到最旧的日期时/ datetime列)。

当你的用户拥有多条消息,您可能需要使用的GROUP BY代替DISTINCT

$queryall = "SELECT mfrom FROM chat WHERE mto='user2' GROUP BY mfrom ORDER BY MAX(datesent) DESC"; 
+0

这就是我想的,但phpmyadmin给我这个。SQL查询:文档 SELECT mfrom FROM聊天WHERE MTO = '用户2' ORDER BY datesent DESC GROUP BY mfrom LIMIT 0,25 MySQL表示:文件 #1064 - 你在你的SQL语法错误;检查与你的MySQL服务器版本相对应的手册,在第1行'GROUP BY mfrom LIMIT 0,25'附近使用正确的语法 –

+0

我的不好 - GROUP BY在ORDER BY之前。 –

+0

MySQL说:文档 #1055 - ORDER BY子句的表达式#1不在GROUP BY子句中,并包含非聚集列'chatdb.chat.datesent',它在功能上不依赖于GROUP BY子句中的列;这是不符合sql_mode = only_full_group_by –