0

自我们的网上商店推出以来已经有几个月了,我们仍在创建新的 bling 以使访问者更容易浏览目录。

目前我们正在尝试添加一个按产品规格过滤的过滤器。

假设下一个选项可用

记忆

  1. 8 GB
  2. 12GB

处理器

  1. 英特尔
  2. AMD A
  3. AMD E

获取所有相关产品 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)或(AMD E))的产品。这种方法正确吗?因为我们确信它应该返回 17 个产品,但是 SQL 没有返回任何内容,并且它不会产生任何错误。

有人可以指出我们正确的方向吗?:)

4

1 回答 1

0

上面的查询肯定不会给出任何结果。因为 lu_specifications. id= '60' 在一个地方和lu_specifications. id= '54' 包含在 AND 条件中。它是一个列值,一次可以包含一个值,因此两个语句不能一起为 TRUE,从而导致 FALSE。

可能是您想在以下地方使用 OR。AND ( lu_specifications. id= '60' AND link_products_specifications. pres_value= '8 GB') OR (( 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'))

于 2015-07-14T09:58:38.480 回答