如何在单个 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 供你玩。
我必须将所有在我的网站上购买产品的用户的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 供你玩。