MySQL中的多个键在一行中

时间:2011-01-17 14:33:54

标签: mysql

我有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...'|

1 个答案:

答案 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”,而是为每个发送电子邮件的用户分别设置行。