我有三个表-产品,类别和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-2BUt我想从每个类别获得产品如下:
**|-----Category1-----|**
|-Product-1
|-Product-2
|-Product-3
**|-----Category2-----|**
|-Product-1
|-Product-2
|-Product-3
**|-----Category3-----|**
|-Product-1
|-Product-2
|-Product-3还有产品名称和其他细节。
请帮助我如何做到这与循环和查询。
发布于 2014-07-31 10:34:12
我建议您使用两个查询:
$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>";
}
}->更新->
我给出了两个查询解决方案,因为我以为你想显示空类别.
在这种情况下,只需使用上面的查询并将"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";
}发布于 2014-07-31 11:57:23
至于我,你的查询看起来不错。您只需要在php级别使用相同类别id对所有产品进行分组。只需使用带有key=category_id的映射和value ={products数组}即可。然后把这张地图填充到你的while循环中。伪代码中的片段只是为了获得主要思想:
while(...) {
if (map.containsKey(category_id) {
map.get(category_id).add(product);
} else {
Array products = new Array();
products.add(product);
map.put(category_id, products)
}
}https://stackoverflow.com/questions/25056466
复制相似问题