【问题标题】:MySQL: SELECT DISTINCT from multiple tablesMySQL:从多个表中选择 DISTINCT
【发布时间】:2011-11-25 19:20:30
【问题描述】:

我有一个数据库,里面有几个表。为了举例,我将其简化并尝试详细解释。

一个表称为 Products,另一个称为 Brands,最后一个称为 Categories。

您可能已经猜到,每个产品只能分配一个类别。此外,每个产品只能分配一个品牌。这些是关系。

因此,在一个页面上,我将带有品牌的链接作为参数传递到详细信息页面,在该页面中列出来自特定品牌的所有产品。在该页面上,我还按类别过滤,该过滤器仅过滤来自所选品牌的产品。

例如索尼 -> 然后从下拉列表中应用的过滤器是 dSLR -> 索尼品牌 dSLR 相机产品的结果。

我想要过滤该类别,这样如果品牌没有特定类别,它甚至不会显示在该下拉过滤器中。

例如类别预定义为:dSLR、视频、手机、鞋子

Sony 有很多产品,但不生产鞋子,所以我希望将其从详细信息页面的过滤列表中排除。

希望你明白我在这里想要什么......

欢迎任何建议:)

【问题讨论】:

    标签: mysql select distinct distinct-values


    【解决方案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 已经指出的那样,请确保您的表上有正确的索引,因为这是一个非常昂贵的查询。

    【讨论】:

      【解决方案2】:

      一种方法是从特定品牌的产品中选择不同类别的列表。

      你可以这样做:

      SELECT DISTINCT(cat_id) FROM PRODUCTS WHERE brand_id = 'sony'
      

      现在您只有sony 产品可用的那些类别

      上述查询在每个页面请求上运行可能会有点慢。您可以通过在brand_id, cat_id上创建一个索引来加快速度

      【讨论】:

      • 也许我不够清楚。我需要 sql 查询,它将填充过滤器的下拉框。类别-> cat_id, cat_name 所以我填充下拉列表,当您选择下拉列表时,您会按某个类别过滤索尼品牌...
      猜你喜欢
      • 1970-01-01
      • 2011-10-06
      • 1970-01-01
      • 2010-10-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多