使用php在SQL数据库中对多个列查询多个输入

时间:2014-05-26 16:28:43

标签: php html mysql sql

试着尽可能简单地描述我的问题...

我有4个输入,用户可以从下拉列表中选择。例如,假设用户选择

  • 输入1 =红色
  • 输入2 =蓝色
  • 输入3 =黄色
  • Input4 = gold

    我的表看起来像这个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。

  • 1 个答案:

    答案 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,所以请先测试一下)