我正在撰写此消息,因为我没有关于以下内容的实现的想法:给定一个包含产品的表和另一个带有产品过滤器的表,我想根据所选过滤器检索产品。 / p>
表格如下:
产品:
的p_id,
p_name,
p_image
product_filters:
PF_ID,
pf_product_id,
pf_filter_id,
pf_filter_value
第三个表中包含过滤器名称和ID,但它并不那么重要。
从HTML表单中我得到一个包含过滤器ID和过滤器值的数组。
我尝试检索与所选过滤器匹配的产品的ID,但它仅适用于一个选定过滤器的文件。如果有多个选定的过滤器,我将无法获得任何结果。
我正在使用PHP和MySQL。
感谢。
答案 0 :(得分:1)
我正在考虑创建这样的查询:
SELECT * FROM products WHERE p_id
IN
(
-- this will be repeated in PHP for every filter id and filter value
SELECT pf_prod_id FROM product_filters
WHERE pf_filter_id = @filterid AND pf_filter_value = @filtervalue
UNION ALL -- omit this line if it's the last filter id
-- end repeat
)
应该做的伎俩(虽然它可能不是解决它的最漂亮的方法)
答案 1 :(得分:1)
我通常这样做的方法是为每个过滤器的过滤表添加一个连接:
SELECT p_id, p_name, p_image FROM products p
INNER JOIN product_filters pf1 ON p.p_id = pf1.pf_product_id
INNER JOIN product_filters pf2 ON p.p_id = pf2.pf_product_id
// Add another join for each additional filter
WHERE pf1.pf_filter_id = @filterid1 AND pf1.pf_filter_value = @filtervalue1
AND pf2.pf_filter_id = @filterid2 AND pf2.pf_filter_value = @filtervalue2
// Add conditions for each additional filter
执行此操作时,您只需要注意性能问题。对一些测试查询做一些解释,以确保您的索引设置正确,并且可以限制一次可以使用的过滤器数量。