自我们网站推出以来已经有几个月了,我们仍然在创造新的金光闪闪,让访问者更容易浏览目录。
目前我们正在尝试添加按产品规格过滤的过滤器。
假设下一个选项可用
目前获取所有相关产品ID的SQL如下所示:
SELECT `lu_specifications` . * , `app_products`.`id` AS product_id
FROM (
`lu_specifications`
)
LEFT OUTER JOIN `link_products_specifications` link_products_specifications ON `lu_specifications`.`id` = `link_products_specifications`.`specification_id`
LEFT OUTER JOIN `app_products` app_products ON `app_products`.`id` = `link_products_specifications`.`product_id`
LEFT OUTER JOIN `link_categories_products` product_link_categories_products ON `app_products`.`id` = `product_link_categories_products`.`product_id`
WHERE `product_link_categories_products`.`category_id` =160
AND (
`lu_specifications`.`id` = '60'
AND `link_products_specifications`.`pres_value` = '8 GB'
)
AND (
(
`lu_specifications`.`id` = '54'
AND `link_products_specifications`.`pres_value` = 'AMD A'
)
OR (
`lu_specifications`.`id` = '54'
AND `link_products_specifications`.`pres_value` = 'AMD E'
)
)
在此示例SQL中,访问者将选择过滤器选项“8GB”,“AMD A”和“AMD E”。 因此,他希望得到一种产品,它具有(8 GB)和((AMD A)OR(AMD E))。 这种方法是否正确?因为我们确信它应该像17个产品一样返回,但是SQL返回none,并且它不会产生任何错误。
有人能指出我们正确的方向吗? :)
答案 0 :(得分:0)
以上查询肯定不会给出任何结果。因为lu_specifications
。id
='60'在一个地方而lu_specifications
。id
='54'包含在AND条件中。
它是一个列值,一次可以包含一个值,因此两个语句不能一起为TRUE,结果为FALSE。
您可能想在以下地方使用OR。
AND(
lu_specifications
。id
='60'
和link_products_specifications
。pres_value
='8 GB'
)
OR (
(
lu_specifications
。id
='54'
和link_products_specifications
。pres_value
='AMD A'
)
要么 (
lu_specifications
。id
='54'
和link_products_specifications
。pres_value
='AMD E'
)
)