[英]Multiple ANDs from multiple columns in an Inner Join
I have a table of products, a table of custom definitions, and a table of values: 我有一个产品表,一个自定义定义表和一个值表:
products 制品
id product_name price
48 product one 32.99
87 another product 2.50
...etc
fielddefs fielddefs
id name
6 brand
9 colour
23 flavour
...etc
fieldvals 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...
I am now trying to do a search using a filter with drop-down selections for each fielddef: 我现在正在尝试使用带有每个fielddef下拉选择的过滤器进行搜索:
$sql = "SELECT * FROM products INNER JOIN fieldvals ON fieldvals.product_id=products.id WHERE product_name LIKE '%".$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类似'%”。$ 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。”')“;
An echo of the SQL gives me something like: SQL的回显给了我类似的东西:
SELECT * FROM products INNER JOIN fieldvals ON fieldvals.product_id=products.id WHERE product_name LIKE '%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') 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')
This code only works for one criteria after the $q - ie you can include $q and $c, or $q and $h, or $q and $v, and it successfully finds matching products, but multiple nested AND statements do not seem to work. 此代码仅对$ q之后的一个条件起作用-即,您可以包括$ q和$ c,或$ q和$ h,或$ q和$ v,它可以成功找到匹配的乘积,但是多个嵌套的AND语句不似乎有效。
Where am I going wrong? 我要去哪里错了?
This link offers a similar question where someone wanted to query from the same "field data" table and wanting multiple conditions. 此链接提供了一个类似的问题 ,即有人要从相同的“字段数据”表中查询并且需要多个条件。
The issue you are encountering is that for any single record, none of them can have MULTIPLE values for a given column, only a result of comparing multiple records and applying a HAVING COUNT(*) = criteria you are looking for. 您遇到的问题是,对于任何单个记录,对于给定的列,它们都不能具有MULTIPLE值,这仅仅是比较多个记录并应用HAVING COUNT(*)=您要查找的条件的结果。 The other (per my link above) shows that. 另一个(通过我上面的链接)显示了这一点。 Now how can this similar approach be applied to your problem. 现在如何将这种类似的方法应用于您的问题。
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.