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

Php 如何显示类别名称及其拥有的每种产品,php,mysql,Php,Mysql,我的数据库中有三个表 category_products表具有类别和产品的id 如何使用category_products表显示类别名称和每个类别下的产品信息 产品表和类别表以下查询将返回具有共同响应类别的产品名称 选择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根据@Wamprir

我的数据库中有三个表

category_products表具有类别和产品的id

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


产品表和类别表

以下查询将返回具有共同响应类别的产品名称


选择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

根据@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%正常工作。

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

要查询此结构,请使用以下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字段的处理,该字段保存每个产品记录的类别名称。由于您可能不想在每一行中重复类别名称,因此该名称将被缓冲并仅在类别更改时打印。

@ManishB在什么中不起作用?它不能完全满足您的需求,但是您运行它时是否会出错?那是什么错误?具体点@ManishB我假设您甚至不尝试将prd.name和cat.name更改为正确的值。没有任何SQL错误的响应对您没有帮助。给我们一些关于你们桌子的线索。@Wampirue我没有给你们任何-1。我需要一个很好的解释。我把prd.name和cat.name改成了prd_name和cat_name,但我发现了错误。@ManishB我是个脾气暴躁的家伙。你能粘贴错误吗?@Wampirue没问题,伙计。我正在编辑我的问题以获得更清晰的视图。等一下,先生,我编辑了这个问题。我希望这会给你一个更清晰的画面。谢谢你的回复。似乎不起作用。1054年的今天,“on子句”@ManishB Sorry中的未知列“prd.id”似乎遗漏了该列。再次更新。