php - 想要从多个类别中获取mysql中按类别分组的产品

标签 php mysql

我有 3 个表 - 产品、类别和 Product_category。

|------ product-------- |
|-Pid
|-Pname

Product table data

|------ catrgory ----|
|-cat_id
|-cat_name

category table data

 |------ product_category --------------|
    |-product_id
    |-category_id

product_table data

这是我的尝试。

$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/

相关文章:

php - 如何防止php中的两个单独的ajax调用修改同一个数据库

java - org.springframework.dao.DataAccessResourceFailureException

mysql - 类型错误 : Cannot set property 'decoder' of undefined

php - 使用本地主机从 MYSQL 更改为 MYSQLI 无法正常工作

php - php上的访问被拒绝错误

php - 动态添加数组键 PHP

php - Laravel:MethodNotAllowedHttpException:此路由不支持 GET 方法。支持的方法:POST

mysql - 仅订购 DATETIME 直到分钟标记 (MySQL)

php - 带外键的 Laravel 存储模型

mysql - MySql TEXT/BLOB 类型的最大声明列长度是多少?