2014-10-16 54 views
1

示例表:MySQL的ORDER BY子的出现次数

ID Name 
1 Apple: Color: Yellow 
2 Apple: Color: Red 
3 Grapes: Color: Green 
4 Grapes: Color: Green 
5 Oranges: Color: Orange 
6 Apple: Color: Yellow 
7 Apple: Color: Yellow 

我需要通过降水果数量来订购吧,不看颜色。我知道桌子本来可以分成水果和颜色,但那是另一回事。

结果应该是这样的,通过串的数量排序的,“之前的所有第一:”

ID Name 
1 Apple: Color: Yellow 
2 Apple: Color: Red 
6 Apple: Color: Yellow 
7 Apple: Color: Yellow 
3 Grapes: Color: Green 
4 Grapes: Color: Green 
5 Oranges: Color: Orange 

是否有可能在MySQL中,或做我需要做在PHP F中的排序。恩?

回答

2
mysql> SELECT e.* FROM example AS e 
JOIN (
    SELECT SUBSTRING_INDEX(name, ':', 1) AS fruit, count(*) AS count 
    FROM example 
    GROUP BY fruit) AS x 
    ON SUBSTRING_INDEX(e.name, ':', 1) = x.fruit 
ORDER BY x.count DESC, e.id; 

+----+------------------------+ 
| id | name     | 
+----+------------------------+ 
| 1 | Apple: Color: Yellow | 
| 2 | Apple: Color: Red  | 
| 6 | Apple: Color: Yellow | 
| 7 | Apple: Color: Yellow | 
| 3 | Grapes: Color: Green | 
| 4 | Grapes: Color: Green | 
| 5 | Oranges: Color: Orange | 
+----+------------------------+ 
+0

看着你的回答终于让我明白了这个令人费解的问题。 – 2014-10-16 22:07:36