试着尽可能简单地描述我的问题...
我有4个输入,用户可以从下拉列表中选择。例如,假设用户选择
我的表看起来像这个atm,
混合色
colour_id |
colour_name |
Number_of_colours |
Colour 1 |
Colour 2 |
Colour 3 |
Colour 4 |
<br /><br /> And the data<br /><br />
001 |
Mucky Brown |
4 |
Red |
blue |
yellow |
gold |
<br>
002 |
Light Purple |
3 |
Red |
blue |
white |
{empty cell} |
<br /><br/>
Color list_tb
Colourist_Id / Colour_name
001 /红色 002 /蓝色 003 /黄色 004 /金
Crossreferencing_tb
Colour_I&#39; d /
Colourlist_I&#39; d /
Crossreferencing_id
我想要的第一件事就是看看是否有一种颜色使用了用户选择的4种颜色,这样就可以直接前进
SELECT * FROM colours_tb WHERE Colour 1 ='red' And Colour 2 ='blue' and Colour 3 ='yellow' and Colour 4 ='gold'
,(我已经有点工作了)
我的下一个问题是我想检查他们的颜色是否只需要选择4个输入中的3个。我猜我需要3张像上面一样的桌子? (我的目标是列出4种选择的无视单曲可以制作的所有颜色排列)
我将如何做到这一点,我只能假设它会包含一些while循环,用于检查颜色colum的数量,并为将要定义的某种计数添加+1。
我一直在思考这个问题,但却无法接近答案。
任何输入都会有很大的帮助。
我正在使用php。
答案 0 :(得分:0)
正如KA_lin所说,你必须再创建两个表,以便建立多对多的关系。然后,您可以通过某种查询来计算原色的数量,如下所示:
SELECT COUNT(1)
FROM IntermediateTable I
INNER JOIN CompositeColoursTable C
ON C.Id = I.IdCompositeColour
WHERE C.name = x -> eg "Mucky Brown"
如果您想在将来的查询中始终提供颜色数量,您还可以构建一个返回复合颜色的视图+如果COUNT函数返回查询。
在下面发表评论。好吧,我理解你也想要相反,即,给定n种颜色,哪种复合颜色具有这些n?&#34;。为此,您需要这样的查询:
SELECT C.name
FROM IntermediateTable I
INNER JOIN CompositeColoursTable C
ON C.Id = I.IdCompositeColour
INNER JOIN PrimaryColoursTable P
ON P.Id = I.IdPrimaryColour
WHERE (P.Name=ColourList(1) or ColourList(1)='') OR
(P.Name=ColourList(2) or ColourList(2)='') OR
(P.Name=ColourList(3) or ColourList(3)='') OR
(P.Name=ColourList(4) or ColourList(4)='')
观察:ColourList是用户从中选择值的地方,并将在查询中评估为&#39; Red&#39;&#39; Blue&#39; Gold&#39; Gold&#39;等等。未选中/空单元格,返回&#39;&#39; (你也可以自定义)。
(我这里没有SQL,所以请先测试一下)