Mysql 查询指向另一个表中一行的多行
我不擅长做mySQL查询,因此无法完成工作。我希望你们知道我问题的答案 我想选择我的产品。就像你有一件黑色t恤,上面有一个背心模型和钻石。你必须有黑色t恤背心模型和钻石排。我想这样做:Mysql 查询指向另一个表中一行的多行,mysql,sql,Mysql,Sql,我不擅长做mySQL查询,因此无法完成工作。我希望你们知道我问题的答案 我想选择我的产品。就像你有一件黑色t恤,上面有一个背心模型和钻石。你必须有黑色t恤背心模型和钻石排。我想这样做: table: product_option -------------------------------- product_option_id name product_combination_id 1 Black 1 2 D
table: product_option
--------------------------------
product_option_id name product_combination_id
1 Black 1
2 Diamond 1
3 Tanktop 1
4 Option 2
5 Option 2
table: product_combination
--------------------------------
product_combination_id name
1 Black tanktop with diamonds
所以我的问题是。是否可以查询产品选项并从中获取产品组合行
我希望你们知道我问题的答案!感谢您抽出时间:)
编辑:
我觉得我的问题太笼统了,我想问得更具体一些
比如说。我有一家服装店。我有一个产品(比如一件T恤)。有两种选择
像这样:
Color:
- Black
- Red
- Orange
Size
- Large
- Xtra Large
- Medium
- Small
Accessoire:
- Diamonds
- Printed
- Swarovski
比如说,我想买一件黑色/Xtra大号T恤,上面有钻石。然后,产品组合
必须为黑色/大/菱形行。我想我需要一张具有多对多关系的外国桌子。类似于具有以下列的产品组合选项表:
product_combination_option
- product_combination_option_id
- product_combination_id
- product_option_id
但话说回来。当有人选择黑色/Xtra大号钻石时,我如何查询并找到哪个产品组合
我希望我现在更清楚一点。很抱歉,我这么晚才更新我的问题!我非常感谢你的回答 我认为您需要的是加入您的表格,这样您就可以根据您拥有的产品选择组合。
因此,可以使用查询
Select *
from product_option inner join product_combination
using(product_combination_id);
这将连接两个表。因此,您可以将*替换为要显示/获取的属性列表。如果您的意思是要将选项列表传递给查询,并获取匹配的
产品组合
条目列表,那么有一种方法:
SELECT *
FROM product_combination
WHERE product_combination_id IN (
SELECT product_combination
FROM product_option
WHERE name IN ('option1', 'option2', 'option3')
GROUP BY product_combination
HAVING COUNT(*) = 3
);
子查询返回一组product\u组合
值,这些值具有所有三个请求的选项。COUNT(*)=3
条件假设单个产品组合
值不能有重复的名称
值与其关联。(这很自然,但如果您的表没有相应的限制,您可以将COUNT(*)
替换为COUNT(不同的名称)
,以确保返回的组包含所有指定的三个选项,而不仅仅是三行,其中一些行包含相同的选项。)
当然,如果查询的选项数量不是固定的,您将需要动态地构建查询,因为IN谓词是不可参数化的(根据项目数量)。但是,您可以尝试使用临时行集而不是硬编码列表。在运行有问题的查询之前,将填充该表,在这种情况下,将对此进行修改:
SELECT *
FROM product_combination
WHERE product_combination_id IN (
SELECT product_combination
FROM product_option
WHERE name IN (SELECT option_name FROM requested_options)
GROUP BY product_combination
HAVING COUNT(*) = (SELECT COUNT(*) FROM requested_options)
);
在上面的查询中,
requested_options
是临时存储的名称(可能是一个临时表,但我不确定MySQL是否允许您访问在不同查询中预先创建和填充的表),而option\u name
是其包含所请求选项的列。您如何尝试查询数据库?使用给定的选项名称或选项id?如果按名称,它可能不会是唯一的,因为现在表的设计方式是,每个名称都与组合有一对一的关联。对不起。那不是我要找的。我想做一个查询,让get的查询“product\u option”表并向我提供“product\u组合”您是否尝试过将产品属性组合获取的值串联起来,然后从组合表中获取?然而,我认为,将这么多的组合输入到该表中需要做很多工作。为什么不直接连接并获取连接的组合,而不是创建一个新表呢?请告诉我这次我是否理解你的问题。嗨,谢谢你的回答!我真的很感激。“产品选项”是一个包含所有选项的表。选项的数量不是固定的。我想我需要一个外国表一样的产品组合选项。我将所有可能的组合与产品选项中的选项放在一起。在我的问题中,我对我的问题进行了编辑,使之更加具体。我希望你能理解我的英语有点差。因此很难让我的问题正确。我希望你现在能理解我的目标!啊,现在看来您还有另一个问题要解决,即模式设计(或者重新设计)。请不要误解我的意思,但我认为您最初关于查询的问题在这一点上变得毫无意义,因为现在还不清楚到底要查询什么(哪些表和哪些列)。您应该先了解第一件事:在试图解决如何查询数据的问题之前,先了解数据的存储方式。如果你需要帮助,请发布一个新问题。我相信这里有很多人对此提出了很好的建议。