【问题标题】:Need help creating a query based on ui filter values需要帮助创建基于 ui 过滤器值的查询
【发布时间】:2015-07-14 09:45:27
【问题描述】:

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

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

假设下一个选项可用

内存

  1. 8 GB
  2. 12 GB

处理器

  1. 英特尔
  2. AMD A
  3. AMD 电子

目前获取所有相关产品 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 没有返回任何产品,并且不会产生任何错误。

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

【问题讨论】:

  • 过滤器选项“8GB”和比较“8GB”是拼写错误还是有一个空格,而另一个没有?
  • 啊,这只是一个错字:)。我会纠正它。在脚本中,它始终带有空格,因为它们是由 filter_option_id 加载的...

标签: php mysql sql webshop


【解决方案1】:

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

您可能想在以下地方使用 OR。 和 ( lu_specifications.id = '60' 和link_products_specifications.pres_value = '8 GB' ) ( ( lu_specifications.id = '54' 和link_products_specifications.pres_value = 'AMD A' ) 或者 ( lu_specifications.id = '54' 和link_products_specifications.pres_value = 'AMD E' ) )

【讨论】:

  • 你成功了。这是对我们之前的重写。过滤器结合了每个选定选项的结果(一个带有产品 ID 的数组)。但是,我们不需要在新版本中组合所有内容。它应该只返回具有 8 GB 且包含 AMD A 或 AMD E 处理器的产品的 ID。 (不是所有具有 8 GB 或包含 AMD A 或 AMD E 处理器的东西)。希望你能明白我在这里想说的话:p
  • lu_specifications.id 从所有字段中删除并仅查询link_products_specifications.pres_value 字段会有帮助吗??
  • 你是否检查过你的基础表有product_link_categories_products.category_id =160 的数据。另外,我猜支架放置不正确。如下所示:
  • 另外,您能否检查一下以下逻辑:product_link_categories_products.category_id` =160 AND ((CONdition1) OR (Condition2) OR (Condition3)) 条件为lu_specifications.id =某事和link_products_specifications.pres_value = 某事
  • category_id = 160 都是笔记本电脑,因为商店是在线的,所以可以使用。我确实尝试了所有 OR,结果得到了正确的值,就好像我们需要它来返回具有“8 GB 或包含 AMD A 或 AMD E 处理器”的产品。我们需要具有“8 GB 并包含 AMD A 或 AMD E”的产品。
猜你喜欢
  • 2010-12-26
  • 1970-01-01
  • 1970-01-01
  • 2012-02-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多