需要帮助创建基于 ui 过滤器值的查询
Need help creating a query based on ui filter values
自从我们的网上商店推出以来已经几个月了,我们仍在创造新的亮点,以使访问者更容易浏览目录。
目前我们正在尝试添加一个按产品规格过滤的过滤器。
假设下一个选项可用
内存
- 8 GB
- 12GB
处理器
- 英特尔
- AMD A
- 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'。
所以他想获得 is/has (8 GB) AND ( (AMD A) OR (AMD E) ) 的产品。
这种方法是否正确?因为我们确定它应该 return 喜欢 17 产品,但是 SQL return 和 none 并没有产生任何错误。
有人能给我们指明正确的方向吗? :)
以上查询肯定不会给出结果。因为 lu_specifications
.id
= '60' 在一个地方并且 lu_specifications
.id
= '54' 包含在 AND 条件中。
它是一个列值,一次可以包含一个值,因此两个语句不能一起为 TRUE,从而导致 FALSE。
您可能想在以下位置使用 OR。
和 (
lu_specifications
.id
= '60'
AND link_products_specifications
.pres_value
= '8 GB'
)
或 (
(
lu_specifications
.id
= '54'
AND link_products_specifications
.pres_value
= 'AMD A'
)
要么 (
lu_specifications
.id
= '54'
AND link_products_specifications
.pres_value
= 'AMD E'
)
)
自从我们的网上商店推出以来已经几个月了,我们仍在创造新的亮点,以使访问者更容易浏览目录。
目前我们正在尝试添加一个按产品规格过滤的过滤器。
假设下一个选项可用
内存
- 8 GB
- 12GB
处理器
- 英特尔
- AMD A
- 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'。 所以他想获得 is/has (8 GB) AND ( (AMD A) OR (AMD E) ) 的产品。 这种方法是否正确?因为我们确定它应该 return 喜欢 17 产品,但是 SQL return 和 none 并没有产生任何错误。
有人能给我们指明正确的方向吗? :)
以上查询肯定不会给出结果。因为 lu_specifications
.id
= '60' 在一个地方并且 lu_specifications
.id
= '54' 包含在 AND 条件中。
它是一个列值,一次可以包含一个值,因此两个语句不能一起为 TRUE,从而导致 FALSE。
您可能想在以下位置使用 OR。
和 (
lu_specifications
.id
= '60'
AND link_products_specifications
.pres_value
= '8 GB'
)
或 (
(
lu_specifications
.id
= '54'
AND link_products_specifications
.pres_value
= 'AMD A'
)
要么 (
lu_specifications
.id
= '54'
AND link_products_specifications
.pres_value
= 'AMD E'
)
)