我正在执行此查询
SELECT m.chat_id, m.msg_sender_id, m.message, m.id,
DATE_FORMAT(m.created_at, '%Y-%m-%d %H:%i:%s') as created_at,
g.id as group_id, g.name as group_name, g.image as group_image
FROM message as m
INNER JOIN chat as c ON c.id = m.chat_id
LEFT OUTER JOIN group as g ON c.group_id = g.id
WHERE c.id = 434
ORDER BY m.id ASC
我想要实现的是从聊天中获取所有消息,并且如果有聊天涉及组则返回组。组附加到聊天对象(而不是消息对象)。由于某种原因,我在所有行上都得到了group
。
您能建议我如何实现这一目标吗?
=============编辑==============
group
表结构如下所示:
`id` int(11) NOT NULL AUTO_INCREMENT,
`created_at` datetime(6) NOT NULL,
`name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`image` longtext COLLATE utf8_bin,
`status` int(11) DEFAULT NULL,
`creator_id` int(11) NOT NULL
chat
表结构如下所示
`id` int(11) NOT NULL AUTO_INCREMENT,
`created_at` datetime(6) NOT NULL,
`group_id` int(11) DEFAULT NULL,
`person1_id` int(11) NOT NULL,
`invitation_id` int(11) NOT NULL,
message
表如下所示
`id` int(11) NOT NULL AUTO_INCREMENT,
`message` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci,
`created_at` datetime(6) NOT NULL,
`chat_id` int(11) NOT NULL,
`msg_sender_id` int(11) NOT NULL,
这是查询的结果
434 14 Some text 900 2017-09-10 09:48:56 3 My group 1 image.jpg
434 13 Some text 2 901 2017-09-10 09:48:59 3 My group 1 image.jpg
434 14 Some text 3 935 2017-09-16 15:37:07 3 My group 1 image.jpg
434 14 Some text 4 968 2017-09-21 06:52:56 3 My group 1 image.jpg
最佳答案
评论太长了。
您的查询是正确的。您有一个用于聊天
和消息
的内部联接
。您有一个组
的左外连接
。
我认为您可能误解了结果集。结果集是一个表,每行都有所有列。您不会获得一些用于消息的列,然后获得其他用于聊天的列。这就是 SQL 的工作原理。
或者,您的查询按 m.id
排序。也许这种排序恰好将所有带有组的消息带到顶部。
关于mysql - mysql中的空值sql连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46401155/