首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >希望从多个类别中按类别获取mysql中的产品组

希望从多个类别中按类别获取mysql中的产品组
EN

Stack Overflow用户
提问于 2014-07-31 10:22:21
回答 2查看 2.2K关注 0票数 0

我有三个表-产品,类别和product_category。

代码语言:javascript
复制
|------ product-------- |
|-Pid
|-Pname

代码语言:javascript
复制
|------ catrgory ----|
|-cat_id
|-cat_name

代码语言:javascript
复制
 |------ product_category --------------|
    |-product_id
    |-category_id

这是我的尝试。

代码语言:javascript
复制
$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/> ";

}

此查询将我的结果显示为:

代码语言:javascript
复制
Category1 ----- Category1-Product 1
Category1 ----- Category1-Product 2
Category1 ----- Category1-Product 3
Category2 ----- Category2-Product-1
Category2 ----- Category2-Product-2

BUt我想从每个类别获得产品如下:

代码语言:javascript
复制
**|-----Category1-----|**
|-Product-1
|-Product-2
|-Product-3

**|-----Category2-----|**
|-Product-1
|-Product-2
|-Product-3

**|-----Category3-----|**
|-Product-1
|-Product-2
|-Product-3

还有产品名称和其他细节。

请帮助我如何做到这与循环和查询。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-07-31 10:34:12

我建议您使用两个查询:

代码语言:javascript
复制
$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“循环替换为:

代码语言:javascript
复制
$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";
}
票数 2
EN

Stack Overflow用户

发布于 2014-07-31 11:57:23

至于我,你的查询看起来不错。您只需要在php级别使用相同类别id对所有产品进行分组。只需使用带有key=category_id的映射和value ={products数组}即可。然后把这张地图填充到你的while循环中。伪代码中的片段只是为了获得主要思想:

代码语言:javascript
复制
    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)
        }
    }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25056466

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档