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

group by multiple columns in SQL/PHP, where both columns can include the same data

我在 php/mySQL 中遇到了一个挑战,我找不到任何其他示例,并且证明是一个挑战。

我有一个 table,它有 "category" 和一个 "subcategory" 列。两者可以包含相同的数据,也可以为空,例如:

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

我想对这些结果进行分组和过滤,以显示所有使用类别的简单列表,例如:

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

我可以按一列进行分组和排序没问题,但看不到包括两列的方法。

SELECT category,subcategory FROM table GROUP BY category,subcategory

我在网上看到的所有示例都涉及按两列分组,其中列不同并且包含不同的数据,例如:名字,姓氏,所以我认为这不是重复!

在此先感谢您对此的任何想法或帮助!


编辑以向@bang 显示当前代码,按照以下评论:

$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 />\n";
}

然后试试这个:

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

第一个 select 获取您的类别,第二个获取您的子类别。

我使用 UNION ALL 来获取所有数据,即使它们是重复的。

在你的 php 中请不要使用提取物 :

$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 />\n";
}