2014-10-16 5 views
1

Пример таблицы:порядок MySQL по количеству вхождений подстроки

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 ф. ех?

ответ

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

Глядя на ваш ответ, наконец, я понял сложный вопрос. –

Смежные вопросы