[英]Display only unique entries in mysql
我正在构建一个基于 mysql 的聊天应用程序。
我的数据库模式有下表,
Users Messages
================= =================
id id
screen_name message
from
to
timestamp
消息表中的发件人和收件人字段包含发送和接收每条消息的用户的 ID。
我正在尝试显示用户($id)和他们的一个朋友($friend)之间的所有消息。 我的查询如下:
$query = "SELECT messages.* , users.screen_name FROM users CROSS JOIN messages ";
$query .= "ON ( messages.to = $id AND messages.from = $friend ) ";
$query .= "OR ( messages.to = $friend AND messages.from = $id )";
问题是每条消息在结果表中出现两次。
我尝试使用 DISTINCT,但它在这种情况下不起作用,或者我用错了。
为了使两个用户之间的每条消息仅一次,我的查询应该是什么?
这样的事情应该可以解决问题:
SELECT
messages.*,
users_from.screen_name AS from_screen_name,
users_to.screen_name AS to_screen_name
FROM
messages
JOIN users AS users_from ON messages.from = users_from.id
JOIN users AS users_to ON messages.to = users_to.id
WHERE
(messages.to = $id AND messages.from = $friend)
OR ( messages.to = $friend AND messages.from = $id)
这样做是将“users”表连接两次,一次在“to”列上,第二次在“from”列上。
@Travesty3 已经建议DISTINCT
关键字将只排除所有字段都等于另一行的重复行。 所以这里的 go 不是DISTINCT
关键字的方式。
但是,您可以做的是简单地GROUP BY messages.id
以便每个消息 ID 只获得一行(但是,不能保证两行中的哪一行将被排除)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.