【问题标题】:How do display category name and each products it has如何显示类别名称及其拥有的每个产品
【发布时间】:2014-08-14 19:26:00
【问题描述】:

我的数据库中有三个表

category_products 表包含类别和产品的 id

我应该如何使用 category_products 表来显示类别名称和每个类别下的产品信息?

产品表和类别表

【问题讨论】:

    标签: php mysql


    【解决方案1】:

    这种结构称为多对多关联。中间表 category_products 通过存储 ID 的组合来连接来自类别和产品的记录。因此,一个类别可以有多个产品,而一个产品也可以有多个类别。

    要查询此结构,请使用以下 SQL:

    SELECT categories.cat_name, products.* FROM categories LEFT JOIN category_products ON categories.cat_id = category_products.cat_id LEFT JOIN products ON category_products.prd_id = products.prd_id ORDER BY categories.cat_name;
    

    你可以像这样在 PHP 中获取数据,例如:

    $result = mysql_query("SELECT categories.cat_name, products.* FROM categories LEFT JOIN category_products ON categories.cat_id = category_products.cat_id LEFT JOIN products ON category_products.prd_id = products.prd_id ORDER BY categories.cat_name;");
    
    if (!$result) {
        die('Error: ' . mysql_error());
    }
    
    $current_category = '';
    while ($row = mysql_fetch_assoc($result)) {
        if($row['cat_name'] != $current_category) {
            echo $row['cat_name'] . "\n";
            echo "--------------------\n";
            $current_category = $row['cat_name'];
        }
        // output your product fields, you need to adapt these names to your columns
        echo $row['prd_name'] . " | " . $row['prd_price'] . "\n";
    }
    

    注意对包含每个产品记录的类别名称的 cat_name 字段的处理。由于您可能不想在每一行中重复类别名称,因此该名称会被缓冲并仅在类别更改时打印。

    【讨论】:

      【解决方案2】:

      以下查询将返回具有对应类别的产品名称。

      SELECT prd.name, cat.name FROM products AS prd JOIN category_products AS cp ON prd.id=cp.prd_id JOIN categories AS cat ON cat.id=cp.cat_id

      【讨论】:

      • @ManishB 无法正常工作?它并没有完全满足您的要求,但是您在运行它时是否遇到错误?那是什么错误?具体点!
      • @ManishB 我假设您甚至不尝试将 prd.namecat.name 更改为正确的值。没有任何 SQL 错误的响应对您没有帮助。向我们提供有关您的桌子的线索。
      • @Wampirue 我没有给你任何-1。我需要 125 声望。我将 prd.name 和 cat.name 更改为 prd_name 和 cat_name 但我发现错误。
      • @ManishB 我是个很短的人。你能粘贴错误吗?
      • @Wampirue 它的好伙伴。我正在编辑我的问题以获得更清晰的视图。稍等片刻。
      【解决方案3】:

      根据@Wamprirue 的回答,这应该可以为您提供您正在寻找的特定结果。

      SELECT cat.cat_name, COUNT(cp.prd_id)
      FROM   products AS prd
             JOIN category_products AS cp
               ON prd.prd_id = cp.prd_id
             JOIN categories AS cat
               ON cat.id = cp.cat_id
      

      应生成包含所有类别名称的输出以及与该类别匹配的产品数量。

      如果没有关于您的表格及其结构的额外信息,我们无法真正为您提供一个无需您进行几次编辑就可以 100% 确定工作的解决方案。

      【讨论】:

      • 先生,我编辑了这个问题。我希望这会给你一个更清晰的画面。感谢您的回复
      • 似乎不起作用。 #1054 - 'on 子句'中的未知列 'prd.id'
      • @ManishB 抱歉 - 似乎错过了那个。再次更新。
      猜你喜欢
      • 2012-09-02
      • 2016-09-02
      • 1970-01-01
      • 2019-08-09
      • 2019-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多