【发布时间】:2024-05-29 13:25:02
【问题描述】:
我有一个存储人们服装的系统。每套服装包含 1 到多个项目。
所以我的桌子是这样的
outfits
+-----------+--------+
| outfit_id | cus_id |
+-----------+--------+
| 1 | 5 |
| 2 | 92 |
+-----------+--------+
items
+---------+-------+-------+
| item_id | name | sku |
+---------+-------+-------+
| 1 | hat | 1111 |
| 2 | pants | 2222 |
| 3 | shirt | 3333 |
| 4 | shoes | 4444 |
+---------+-------+-------+
items_in_outfit
+--------+-----------+---------+
| ino_id | outfit_id | item_id |
+--------+-----------+---------+
| 1 | 1 | 3 |
| 2 | 1 | 2 |
| 3 | 1 | 4 |
| 4 | 2 | 1 |
| 4 | 2 | 3 |
+--------+-----------+---------+
我收到了这些信息:
-
cus_id=92想用sku的1111和3333打造另一套服装
但是,这是 outfit_id=2 的副本。所以我希望 mysql 将 2 的 outfit_id 返回给我。如果它不是重复的,则不返回任何内容。仅当 相同 cus_id 尝试制作的服装已经完全相同 sku 时,才算作重复。
如果cus_id=5 想用sku 的1111 和3333 创建另一套服装。它应该什么都不返回(因为它不是重复的)因为cus_id=5 没有只有1111 和3333 的装备
SELECT o.outfit_id FROM
outfits o JOIN
items_in_outfit iio
ON o.outfit_id = iio.outfit_id JOIN
items i
ON iio.item_id = i.item_id
WHERE cus_id = 92 AND ...
【问题讨论】:
-
@Barmar 不,这是我自己的项目。我看到 mysql 无法在一对多的关系中创建唯一键。我的尝试是在 PHP 中,它太慢了,因为我将 SKU 连接成一个字符串并检查该字符串是否与提供给我的 sku 相同。我不确定如何做到这一点,因为它是一对多的关系
-
@Barmar 这是一个一对多的关系表。我理解,使用 1 对 1 表更容易。
-
你是如何驾驶它的——它是一个存储过程吗?你是如何传递 SKU 的?还是将它们写入请求表?