我有数据库,里面有几个表。为了举例,我将简化它并尝试详细解释。
一个表称为Products,另一个表称为Brands,最后一个表称为Categories。
您可能猜到每个产品只能分配一个类别。此外,每个产品只能分配一个品牌。这些是关系。
因此,在一个页面上,我将与Brands的链接作为参数传递到详细信息页面,其中列出了来自特定品牌的所有产品。在该页面上,我还按类别过滤,仅按过滤器过滤选定品牌的产品。
E.g。索尼 - >然后从下拉列表中应用的过滤器是dSLR - >索尼品牌dSLR相机产品的结果。
我想要的是过滤掉这些类别,这样如果Brand没有特定类别,它甚至不会显示在该下拉过滤器上。
E.g。类别预定义为:dSLR,视频,手机,鞋子
索尼有很多产品,但不会制鞋,所以我希望将它从详细信息页面上的过滤器列表中排除。
希望你能理解我想要的东西......
任何建议都非常受欢迎:)
答案 0 :(得分:1)
好吧,你应该可以像这样加入三个表:
SELECT DISTINCT c.category_id, c.category_name
FROM products p
JOIN categories c ON p.category_id = c.category_id
JOIN brands b ON p.brand_id = b.brand_id
WHERE b.brand_name='Sony';
然后显示如下产品:
SELECT p.product_id, p.product_name
FROM products p
JOIN categories c ON p.category_id = c.category_id
JOIN brands b ON p.brand_id = b.brand_id
WHERE b.brand_name='Sony' AND c.category_id='1234';
正如danishgoel已经指出的那样,请确保您的表上有正确的索引,因为这是一个非常昂贵的查询。
答案 1 :(得分:0)
一种方法是从特定品牌的产品中选择不同类别的列表。
你可以这样做:
SELECT DISTINCT(cat_id) FROM PRODUCTS WHERE brand_id = 'sony'
现在,您只有sony
个产品可用的类别
上述查询在每个页面请求上运行可能有点慢。您可以通过在brand_id, cat_id