dtj4307 2015-02-18 13:18
浏览 19
已采纳

在SQL / PHP中按多列分组,其中两列可以包含相同的数据

I have a challenge in php/mySQL, that I cant find any other examples of, and is proving a bit of a challenge.

I have a table that has "category" and a "subcategory" columns. Both could contain the same data, or could be blank, eg:

--------------------------
| category | subcategory |
--------------------------
|   blue   |             |
|   blue   |    green    |
|  green   |     red     |
|  yellow  |     red     |
|    red   |             |
--------------------------

I want to group and filter these results to show a simple list of all categories used, eg:

blue (2)
red (3)
green (2)
yellow (1)

I can group and sort by one column no problem, but cant see a way how to do this including two columns.

SELECT category,subcategory FROM table GROUP BY category,subcategory

All the examples I can see online involve grouping by two columns, where the columns are different and contain different data, eg: firstname, lastname, so I dont think this is a duplication!

Thanks in advance for any thought or assistance with this!


edited to show current code to @bang, as per comments below:

$query = "SELECT category, count(*) FROM ( SELECT category from ae_test UNION ALL SELECT subcategory as 'category' from ae_test ) as t GROUP BY category";
$result = mysql_query($query) or die (mysql_error());
while ($row = mysql_fetch_array($result)) {
extract($row);
echo "$category ($count)<br />
";
}
  • 写回答

1条回答 默认 最新

  • dtziv24262 2015-02-18 13:34
    关注

    Then try this :

    SELECT category, count(*)
    FROM ( 
        SELECT category from table
        UNION ALL
        SELECT subcategory as 'category' from table
    ) as t GROUP BY category;
    

    The first select get your category and the second your subcategory.

    I use UNION ALL to get all data even if they are duplicated.

    In your php please never use extract :

    $query = "SELECT category, count(*) FROM ( SELECT category from ae_test UNION ALL SELECT subcategory as 'category' from ae_test ) as t GROUP BY category";
    $result = mysql_query($query) or die (mysql_error());
    while ($row = mysql_fetch_array($result)) {
    
         echo "$row['category'] ($row['count(*)'])<br />
    ";
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 微信小程序协议怎么写
  • ¥15 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?
  • ¥20 怎么用dlib库的算法识别小麦病虫害
  • ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启
  • ¥15 java写代码遇到问题,求帮助
  • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看