我有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发送给多个人。对于每个收件人,都会生成一个新的收件箱记录。
截至目前,无论收件人如何,我都会生成一个发件箱记录。
发送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...'|
答案 0 :(得分:4)
MySQL的IN
不能像你想象的那样工作。 outbox.to_id
是一个字符串,users.user_id
是一个int。 MySQL试图将to_id转换为int,并在到达','(第一个非int字符)时停止,因此'1,2,3'转换为'1'。
This question会帮助你,阅读接受的答案。
我建议不要在一个字段中存储“1,2,3”,而是为每个发送电子邮件的用户分别设置行。