[英]MySQL multiple keys in a single row
我有3张桌子; 收件箱,发件箱和邮件。
对于单个消息,数据如下所示。
信息:
+----------+----------------+
|message_id|content |
+----------+----------------+
|1 |'lorem ipsum...'|
收件箱:
+--------+----------+-----+-------+
|inbox_id|message_id|to_id|from_id|
+--------+----------+-----+-------+
|1 |1 |1 |1 |
|2 |1 |2 |1 |
|3 |1 |3 |1 |
发件箱:
+---------+----------+-----+-------+
|outbox_id|message_id|to_id|from_id|
+---------+----------+-----+-------+
|1 |1 |1,2,3|1 |
一个用户可以将PM发送给多个人。 对于每个收件人,都会生成一个新的收件箱记录。
截至目前,Im生成了一个发件箱记录,无论收件人是谁。
发送PM后,我能够准确生成上面显示的数据,但是在尝试为发件箱生成用户名时遇到了问题。
我希望能够对发件箱执行类似的操作(以下查询是我想要完成的操作,但当然不起作用)。
SELECT
users.username,
messages.message_id,
messages.subject
FROM
messages
JOIN
outbox ON outbox.message_id = message.message_id
JOIN
users ON users.user_id IN (outbox.to_id)
WHERE
outbox.from_id = 1
最终结果是
+-------------------+----------+----------------+
|username |message_id|subject |
+-------------------+----------+----------------+
|user1, user2, user3|1 |'lorem ipsum...'|
MySQL的IN
不能像您想象的那样工作。 outbox.to_id
是一个字符串, users.user_id
是一个int。 MySQL试图将to_id转换为int,并在到达','(第一个非int字符)时停止,因此'1,2,3'转换为'1'。
我问的这个问题将对您有所帮助,请阅读已接受的答案。
我建议您不要将单个“ 1,2,3”存储在一个字段中,而是将每个要发送给电子邮件的用户使用单独的行。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.