繁体   English   中英

MySQL在一行中包含多个键

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM