繁体   English   中英

仅显示 mysql 中唯一的条目

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM