【问题标题】:How can i store multiple values on a single mysql column?如何在单个 mysql 列上存储多个值?
【发布时间】:2022-01-18 17:47:24
【问题描述】:

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

表格示例:

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

提前致谢。

【问题讨论】:

  • 您将拥有一个包含 Product_Id 外键和 User_Id 的单独表
  • 我建议不需要存储 NONEof 。它应该可以通过查询ProductUsers 表来创建
  • 把东西放在一列很容易;如果您需要根据该列中的值进行搜索或排序,则几乎不可能解压它们。

标签: mysql database database-design


【解决方案1】:

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

用户

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 供你玩。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-25
    相关资源
    最近更新 更多