繁体   English   中英

Mysql - 如何获取同一个表的两个外键列的数据

[英]Mysql - how to get data for two foreign key columns of same table

我的数据库中有两个表

  1. 表:具有列的usersidusernameemail etc.s

  2. 表: users_messages包含列: idtofrommessagessent_time

tofrom是关键usersusers表。 问题是我需要:
“从用户名和消息中选择所有用户”。

例如,如果表格行如下所示:

From, To,   Message
11,   14,   Hi, How are you
14,   11,   Hello,

如果11是约翰,14是标记,那么我需要输出如下:

From,   To,     Message
john,   mark,   Hi, How are you
mark,   john,   Hello,

使用我的查询,我只能从列或列获取用户名,但不能同时获取两者的用户名。 如何执行向我和两个用户名提供的查询?

以下查询给出了空结果:

SELECT  u.username, m.message, m.from, m.to  
FROM  `users_messages` m,  `users` u
where 
m.from = u.id and  m.to = u.id

LIMIT 0 , 30  

我尝试过其他查询,但无法获得所需的输出。 我是否还需要自助加入消息表?

SELECT u1.username AS "sender", u2.username AS "recipient", m.message, m.from, m.to  
FROM `users_messages` m
LEFT JOIN `users` u1 ON (u1.id = m.from)
LEFT JOIN `users` u2 ON (u2.id = m.to)
WHERE m.from = XX OR m.to = XX

尝试这个

   select u.`name` as `FROM`, u2.`name` as `TO`, `Message` 
   from users_messages um 
   inner join users u On um.`From` = u.id
   inner join users u2 On um.`To` = u2.id
   LIMIT 0 , 30

在这里演示

如果您想从一个用户获取指定的消息,请添加此消息

  WHERE u.`name` = 'mark' // to get messages FROM mark

或这个

  WHERE u2.`name` = 'mark'  // to get messages TO mark

是的自我加入可以帮助您实现所需的输出:

SELECT  u1.username, m.message, u2.username 
FROM  users_messages m,  users u1, users u2
where 
m.from = u1.id and  m.to = u2.id

LIMIT 0 , 30

假设:from和to不会有空值

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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