【发布时间】:2014-02-23 23:31:21
【问题描述】:
我有以下表格:
chats:
+--------+-------------+--------------+--------------+---------------------+
| chatID | firstPerson | secondPerson | chatAccepted | creationDate |
+--------+-------------+--------------+--------------+---------------------+
| 1 | 59 | 52 | 1 | 31-01-2014 09:32:37 |
| 2 | 59 | 12 | 0 | 28-01-2014 11:07:25 |
| 3 | 34 | 59 | 1 | 28-01-2014 08:50:48 |
| 4 | 78 | 59 | 1 | 26-01-2014 03:58:12 |
+--------+-------------+--------------+--------------+---------------------+
messages:
+-----------+-------------+--------+----------+------------+---------------------+
| messageID | messageText | chatID | senderID | receiverID | creationDate |
+-----------+-------------+--------+----------+------------+---------------------+
| 1 | Lorum... | 1 | 59 | 52 | 31-01-2014 09:32:37 |
| 2 | Ipsum... | 1 | 52 | 59 | 28-01-2014 11:07:25 |
| 3 | Dollar... | 3 | 34 | 59 | 28-01-2014 08:50:48 |
| 4 | Sit... | 3 | 59 | 34 | 31-01-2014 11:09:48 |
+-----------+-------------+--------+----------+------------+---------------------+
我想要得到的结果是 chatID,其中(firstPerson = 59 或 secondPerson = 59)和 chatAccepted = 1。现在我无法弄清楚:我希望结果按“哪个”排序有最新消息”。
我尝试了很多不同的东西,其中之一是:
"SELECT chats.chatID, chats.firstPerson, chats.secondPerson, str_to_date(messages.creationDate,'%d-%m-%Y %H:%i:%s') AS cdate
FROM chats
INNER JOIN messages
ON chats.chatID=messages.chatID
WHERE chats.chatAccepted = 1 AND messages.receiverID = 59
UNION SELECT chats.chatID, chats.firstPerson, chats.secondPerson, str_to_date(messages.creationDate,'%d-%m-%Y %H:%i:%s') AS cdate
FROM chats
INNER JOIN messages
ON chats.chatID=messages.chatsID
WHERE chats.chatAccepted = 1 AND messages.senderID = 59
ORDER BY cdate desc"
这就像一个魅力,除了还没有消息的时候。比它只是结果没有记录。但我需要知道该聊天是否被接受,否则他们甚至无法开始聊天。
非常欢迎任何帮助。 如果您需要更多信息,请告诉我!
更新:所以在这种情况下我至少想要的是:
+--------+
| chatID |
+--------+
| 3 |
| 1 |
| 4 |
+--------+
这是因为 chatID '3' 有链接到它的最新消息。 chatID '4' 还没有消息,但它是一个接受的聊天,所以它应该在结果中。
【问题讨论】:
-
想要的结果实际上是什么样的?
-
您的totla操作要查找最新消息非常昂贵
-
另外,“聊天”的所有参与者都不会收到一条消息吗?
-
我不明白为什么这是一个坏问题,那么为什么是 -1?不管怎样@Strawberry 是两个人之间的聊天,只有在两个人都接受聊天时才会显示。
-
我的观点是,如果聊天只存在于两个人之间,并且我们知道消息发送者是谁,那么消息接收者是多余的。