如何显示类别名称及其拥有的每个产品

时间:2014-08-14 19:26:00

标签: php mysql

Tables in database

我的数据库中有三个表

category_products table

category_products表具有类别和产品的ID

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

enter image description here

产品表和类别表

3 个答案:

答案 0 :(得分: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字段的处理,该字段包含每个产品记录的类别名称。由于您可能不希望在每一行中重复类别名称,因此名称将被缓冲,并且仅在类别更改时打印。

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

根据@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%明确的解决方案,而您无需进行一些编辑。