我有 3 个表 - 产品、类别和 Product_category。
|------ product-------- |
|-Pid
|-Pname
|------ catrgory ----|
|-cat_id
|-cat_name
|------ product_category --------------|
|-product_id
|-category_id
这是我的尝试。
$comp_query=mysql_query("SELECT DISTINCT p.Pname AS product_name, p.Pid AS product_id,
c.cat_name AS category_name, c.cat_id AS category_id
FROM product AS p
JOIN product_category AS pc ON p.Pid = pc.product_id
JOIN category AS c ON c.cat_id = pc.category_id
Order BY category_id");
while($row=mysql_fetch_array($comp_query)){
echo " $row[category_name] -----";
echo " $row[product_name]<br/> ";
}
此查询显示的结果为:
Category1 ----- Category1-Product 1
Category1 ----- Category1-Product 2
Category1 ----- Category1-Product 3
Category2 ----- Category2-Product-1
Category2 ----- Category2-Product-2
但是我想从每个类别中获取产品,例如:
**|-----Category1-----|**
|-Product-1
|-Product-2
|-Product-3
**|-----Category2-----|**
|-Product-1
|-Product-2
|-Product-3
**|-----Category3-----|**
|-Product-1
|-Product-2
|-Product-3
还有产品名称和其他详细信息。
请帮助我如何通过循环和查询来做到这一点。
最佳答案
我建议您使用 2 个查询:
$q1 = mysql_query("SELECT * FROM catrgory ORDER BY cat_name");
while($cat = mysql_fetch_assoc($q1)) {
print "**|-----".$cat['cat_name']."-----|**<br>";
$q2 = mysql_query("SELECT * FROM product WHERE Pid IN (SELECT product_id FROM product_category WHERE category_id = ".$cat['cat_id'].") ORDER BY Pname");
while($prod = mysql_fetch_assoc($q2)) {
print " |***".$prod['Pname']."<br>";
}
}
-->更新-->
我给出了 2 个查询解决方案,因为我认为您想显示空类别...
在这种情况下,只需使用上面的查询并将“while”循环替换为:
$title_shown ='';
while($row=mysql_fetch_array($comp_query)){
if($row['category_name'] != $title_shown) {
$title_shown = $row['category_name'];
print "\n**|-----".$row['category_name']."-----|**\n";
}
print "|-".$row['product_name']."\n";
}
关于php - 想要从多个类别中获取mysql中按类别分组的产品,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25056466/