我有一个消息表:

messages:
    id(int)
    send_id(int)
    receive_id(int)


而且我希望仅当存在a-> b和b-> a时才可以从中选择行,例如:

    id     send_id recieve_id
    0,     15,     16
    1,     16,     15


这样,基本上每个人都传递了一条消息。我如何才能只选择这两行之一(发送或接收),以及全部针对特定ID的行。

我只想返回具有这种双重性的结果。

我的代码当前使用嵌套的SELECT,并且根本无法正常工作。

最佳答案

您可以利用MySQL的LEASTGREATEST内置函数来获得结果。

SELECT  *
FROM    messages
WHERE   (LEAST(send_id, recieve_id), GREATEST(send_id, recieve_id), id)
IN
(
    SELECT  LEAST(send_id, recieve_id) as x,
            GREATEST(send_id, recieve_id) as y,
            MAX(id) msg_ID
    FROM    messages
    GROUP   BY x, y
);



SQLFiddle Demo
MySQL Comparison Operator (LEAST/GREATEST)

关于mysql - 如何获取包含双重ID引用的行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15017968/

10-10 13:28