我的数据库中有三个表
category_products表具有类别和产品的ID
我应该如何使用category_products表来显示每个类别下的类别名称和产品信息?
产品表和类别表
答案 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%明确的解决方案,而您无需进行一些编辑。德尔>