Mysql 如何从一个表中获取两个外键值

Mysql 如何从一个表中获取两个外键值,mysql,Mysql,我有两张桌子: 用户 table.increments('user_id').primary() table.string('fname').notNull() table.string('mname').notNull() table.string('lname').notNull() table.integer('level_id').notNull() table.string('username').notNull() table.string('password').notNull()

我有两张桌子:

用户

table.increments('user_id').primary()
table.string('fname').notNull()
table.string('mname').notNull()
table.string('lname').notNull()
table.integer('level_id').notNull()
table.string('username').notNull()
table.string('password').notNull()
table.boolean('is_deleted').defaultTo(false)
table.unique('username')
table.increments('message_id').primary()
table.integer('sender_id')
table.integer('receiver_id')
table.boolean('is_private').defaultTo(true)
table.text('message')
table.boolean('is_deleted').defaultTo(false)
消息

table.increments('user_id').primary()
table.string('fname').notNull()
table.string('mname').notNull()
table.string('lname').notNull()
table.integer('level_id').notNull()
table.string('username').notNull()
table.string('password').notNull()
table.boolean('is_deleted').defaultTo(false)
table.unique('username')
table.increments('message_id').primary()
table.integer('sender_id')
table.integer('receiver_id')
table.boolean('is_private').defaultTo(true)
table.text('message')
table.boolean('is_deleted').defaultTo(false)
现在的问题是,我想加入这些表,并获得接收方和发送方的名称

起初,我试图只获取消息并循环数据以收集接收者和发送者的姓名,因此另一个查询非常糟糕,因此我希望在一个查询中获取所有信息

我在
连接上尝试了
,但结果是空的

SELECT * 
FROM messages m 
JOIN users u ON u.user_id = m.sender_id 
    AND u.user_id = m.receiver_id
老实说,我只是一次又一次地说,我真的不知道这样一个查询背后的逻辑

预期代码:

[
   {  
      "message_id":54,
      "sender_name": 'Ernie Jeash Vill',
      "receiver_name": 'Karma Morningstar Blackshaw',
      "is_private":1,
      "message":"q",
      "is_deleted":0,
      "created_at":"2019-09-03T08:45:09.000Z",
      "updated_at":null,
   },
   {  
      "message_id":53,
      "sender_name":'Karma Morningstar Blackshaw',
      "receiver_name": 'Ernie Jeash Vill',
      "is_private":1,
      "message":"e",
      "is_deleted":0,
      "created_at":"2019-09-03T08:45:09.000Z",
      "updated_at":null,
   }
]

您需要将
消息
加入
用户
两次,收件人和发件人的姓名各一次:

SELECT
    m.*,
    u1.lname AS sender_last,
    u1.fname AS sender_first,
    u2.lname AS receiver_last,
    u2.fname AS receiver_first
FROM messages m 
INNER JOIN users u1
    ON u1.user_id = m.sender_id
INNER JOIN users u2
    ON u2.user_id = m.receiver_id;

同一个表中可以有多个外键

它不需要任何特殊处理或语法。只需在表上声明两个独立的外键

请在此处阅读更多信息: