簡體   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