繁体   English   中英

内部联接中多个列的多个AND

[英]Multiple ANDs from multiple columns in an Inner Join

我有一个产品表,一个自定义定义表和一个值表:

制品

id   product_name         price
48   product one          32.99
87   another product      2.50
...etc

fielddefs

id   name
6    brand
9    colour
23   flavour
...etc

fieldvals

product_id   fielddef_id   value
48           6             Rowntree
48           9             Red
48           23            Strawberry
87           6             Cadburys
87           9             Yellow
87           23            Lemon
etc...

我现在正在尝试使用带有每个fielddef下拉选择的过滤器进行搜索:

$ sql =“ SELECT * FROM products INNER JOIN fieldvals on fieldvals.product_id = products.id WHERE product_name类似'%”。$ q。“%'AND(fielddef_id ='7'AND value ='”。$ c。“' )AND(fielddef_id ='8'AND value ='“。$ b。”')AND(fielddef_id ='9'AND value ='“。$ f。”')AND(fielddef_id = '10'AND value =' “。$ t。”')AND(fielddef_id ='5'AND value ='“。$ h。”')AND(fielddef_id ='6'AND value ='“。$ v。”')“;

SQL的回显给了我类似的东西:

SELECT * FROM products INNER JOIN fieldvals on fieldvals.product_id = products.id WHERE product_name类似'%cola%'AND(fielddef_id ='7'AND value ='Purple')AND(fielddef_id ='9'AND value ='Apple' )AND(fielddef_id = '10'AND value ='Party')AND(fielddef_id ='5'AND value ='true')AND(fielddef_id ='6'AND value ='true')

此代码仅对$ q之后的一个条件起作用-即,您可以包括$ q和$ c,或$ q和$ h,或$ q和$ v,它可以成功找到匹配的乘积,但是多个嵌套的AND语句不似乎有效。

我要去哪里错了?

此链接提供了一个类似的问题 ,即有人要从相同的“字段数据”表中查询并且需要多个条件。

您遇到的问题是,对于任何单个记录,对于给定的列,它们都不能具有MULTIPLE值,这仅仅是比较多个记录并应用HAVING COUNT(*)=您要查找的条件的结果。 另一个(通过我上面的链接)显示了这一点。 现在如何将这种类似的方法应用于您的问题。

SELECT 
      P.ID,
      P.Product_Name,
      P.Price
   FROM 
      products P
         INNER JOIN fieldvals FV1
            ON P.id = FV1.product_id 
            AND FV1.FieldDef_ID = '7'
            AND FV1.Value = 'value expected for 7'

         INNER JOIN fieldvals FV2
            ON P.id = FV2.product_id 
            AND FV2.FieldDef_ID = '8'
            AND FV2.Value = 'value expected for 8'

         INNER JOIN fieldvals FV3
            ON P.id = FV3.product_id 
            AND FV3.FieldDef_ID = '9'
            AND FV3.Value = 'value expected for 9'

         (continue same "join" sample above for as many
          criteria conditions you need to add... just keep
          incrementing the alias ... FV1, FV2, FV3, etc...)
   WHERE 
      P.Product_Name like '%your criteria%'

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM