如何通过从两列mysql中选择来进行1列查询

时间:2012-06-25 18:28:00

标签: mysql nested-queries

我有一个消息系统(非常基本),它有一个这样的表:

**MESSAGE_ID**  **RUSER_ID**    **SUSER_ID**    **MESSAGE_DATA**    **DATE**

RUSER 是接收用户, SUSER 是发送用户。如果我想输出一个输出某个用户消息的查询,我现在会这样做:

从PRIVATE_MESG中选择*,其中RUSER_ID = $ USER_ID或SUSER_ID = $ USER_ID

这会给我所有与该USER_ID相关联的message_id。我想要的是创建一个列,该列只生成与特定用户关联的 RUSER_ID SUSER_ID 相关联的 ID 。我需要它来选择 RUSER_ID或SUSER_ID 等于 USER_ID 的邮件,但只显示不是 USER_ID

的邮件>

然后我想根据该查询的输出做一个组。

非常感谢任何帮助!

谢谢!

更新我并不是在寻找message_id,我只是在寻找该人写入或收到的用户列表。

更新 众所周知,我完全接受了这个问题的答案!我稍后调整它,以便它也会按照从最新到最旧的日期显示它们。我通过使用DATE()和TIME()函数将DATETIME分为DATE和TIME来完成此操作。这是我的最后一个问题:

    SELECT
    IF(RUSER_ID = $USER, SUSER_ID, RUSER_ID) as THE_OTHER_GUY, DATE(DATE) as DAY, TIME(DATE) as TIME
    FROM PRIVATE_MESG
    WHERE RUSER_ID = $USER
OR SUSER_ID = $USER;
group by THE_OTHER_GUY ORDER BY DAY DESC, TIME DESC

希望这有助于下一个人!

2 个答案:

答案 0 :(得分:1)

您可以查询:

SELECT
    *,
    IF(RUSER_ID = $USER_ID, SUSER_ID, RUSER_ID) as THE_OTHER_GUY
FROM PRIVATE_MESG
WHERE RUSER_ID = $USER_ID
    OR SUSER_ID = $USER_ID;

答案 1 :(得分:0)

SELECT SUSER_ID FROM PRIVATE_MESG WHERE RUSER_ID=$USER_ID
UNION
SELECT RUSER_ID FROM PRIVATE_MESG WHERE SUSER_ID=$USER_ID

它检索:
- 向$ USER_ID发送邮件的用户ID列表
- 从$ USER_ID

收到消息的用户ID列表

UNION将2个列表分组到一个结果集中。