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;
同一个表中可以有多个外键
它不需要任何特殊处理或语法。只需在表上声明两个独立的外键
请在此处阅读更多信息: