如何在单个 mysql 列中存储多个值?

How can i store multiple values on a single mysql column?

我必须将所有在我的网站上购买产品的用户的Id存储在MySQL table中,以便每个用户都可以是他购买的所有产品。我不想为每个用户创建一个 table,有没有比用逗号分隔更简单的方法来存储这种数据?

table示例:

Product_name Price Id_users_that_bought
:**********: :9;1;510;77;:

提前致谢。

这是一个非常简单的视图,但给出了一个典型结构的概念。

用户

id name
1 User 1
2 User 2

产品

id name description price
1 Product 1 descr 55
2 Product 2 descr 65
3 Product 3 descr 45
4 Product 4 descr 75

订单

id user_id date status
1 1 2022-01-18 21:03:22 new
2 2 2022-01-18 21:07:03 new

orders_products

order_id product_id quantity price
1 1 1 55
1 2 1 65
1 3 1 45
2 2 1 65
2 4 1 75

将可能多余的价格存储在 orders_products 中会很方便,因为价格可能会随时间变化。

有了这样的结构,查询就很简单了-

/* find all products bought by "User 1" */
SELECT p.*
FROM users u
JOIN orders o
    ON u.id = o.user_id
JOIN orders_products op
    ON o.id = op.order_id
JOIN products p
    ON op.product_id = p.id
WHERE u.name = 'User 1';

/* find all users who bought "Product 2" */
SELECT u.*
FROM products p
JOIN orders_products op
    ON p.id = op.product_id
JOIN orders o
    ON op.order_id = o.id
JOIN users u
    ON o.user_id = u.id
WHERE p.name = 'Product 2'

这里有一个 db<>fiddle 供你玩。