gpt4 book ai didi

mysql - MYSQL 中字段中的数组是否有替代方案?

转载 作者:行者123 更新时间:2023-11-29 05:10:07 25 4
gpt4 key购买 nike

我有 2 个表,即 userinfo 和 newsinfo。每个用户都可以根据需要添加/删除任何新闻提要。因此在任何时候,新闻只会传送给那些订阅了每个新闻的提供者而已。 userinfo 表中的用户和 newsinfo 表中的新闻提供者将随着时间的推移而添加或删除。我使用 php 作为前端。

表:用户信息

+---------------+-----------------+--------------------+ 
| index | name | channel_list |
+---------------+-----------------+--------------------+
| 0 | aaaa | 0,1 |
| 1 | bbbb | 0,1,2,3 |
| 2 | cccc | 3,4 |
+---------------+-----------------+--------------------+

表:新闻信息

+---------------+-----------------+ 
| channel | provider |
+---------------+-----------------+
| 0 | cnn |
| 1 | bbc |
| 2 | fox |
| 3 | rtl |
+---------------+-----------------+

目前我所做的是在 userinfo.channel_list 中使用数组来存储订阅的新闻 channel 。

有没有更好的方法在不使用数组的情况下实现这一点?

最佳答案

与以下附加表 (userinfo_newsinfo) 创建多对多关系:

+-------+------+  +---------+-------------+  +-------------------+
| index | name | | channel | provider | | userinfo_newsinfo |
+-------+------+ +---------+-------------+ +--------+----------+
| 0 | aaaa | | 0 | cnn | | index | channel |
| 1 | bbbb | | 1 | bbc | +--------+----------+
| 2 | cccc | | 2 | fox | | 0 | 0 |
+-------+------+ | 3 | rtl | | 0 | 1 |
+---------+-------------+ | 1 | 0 |
| 1 | 1 |
| 1 | 2 |
| 1 | 3 |
| 2 | 3 |
| 2 | 4 |
+--------+----------+

现在您可以删除表 userinfo 上的列 channel_list 并将其转换为新表。

Note: A column like channel_list should not be used! Use normalization to check and improve your database structure. The new table userinfo_newsinfo improves the database structure by considering the normalization.

要创建这个新表,您可以使用以下 SQL:

CREATE TABLE userinfo_newsinfo (
`index` INT NOT NULL,
`channel` INT NOT NULL,
FOREIGN KEY (`index`) REFERENCES userinfo(`index`),
FOREIGN KEY (`channel`) REFERENCES newsinfo(`channel`)
);

要选择用户的所有 channel ,您可以执行以下查询:

SELECT newsinfo.provider 
FROM userinfo u
INNER JOIN userinfo_newsinfo un ON u.index = un.index
INNER JOIN newsinfo n ON n.channel = un.channel
WHERE u.index = 0

关于mysql - MYSQL 中字段中的数组是否有替代方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40817645/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com