需要帮助基于ui过滤器值创建查询

时间:2015-07-14 09:45:27

标签: php mysql sql webshop

自我们网站推出以来已经有几个月了,我们仍然在创造新的金光闪闪,让访问者更容易浏览目录。

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

假设下一个选项可用

MEMORY

  1. 8 GB
  2. 12 GB
  3. PROCESSOR

    1. INTEL
    2. AMD A
    3. AMD E
    4. 目前获取所有相关产品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,并且它不会产生任何错误。

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

1 个答案:

答案 0 :(得分:0)

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

您可能想在以下地方使用OR。 AND(     lu_specificationsid ='60'     和link_products_specificationspres_value ='8 GB' ) OR (     (         lu_specificationsid ='54'         和link_products_specificationspres_value ='AMD A'     )     要么 (         lu_specificationsid ='54'         和link_products_specificationspres_value ='AMD E'     ) )