2013-02-20 9 views
6

Powiedz, mam następujące wyniki:Zamawianie wyników ciągów MySQL bez zdefiniowanej kolacji?

Mackay 
Mackay Airport 
Melbourne 
Melbourne Airport 
Sydney 
Sydney Ac 
Sydney Airport 

Jak mogę to zrobić więc oni są sortowane z lotniska zawsze na górze z nich? W porządku alfabetycznym: np.

Mackay Airport 
Mackay 
Melbourne Airport 
Melbourne 
Sydney Airport 
Sydney 
Sydney Ac 

Nieco mylić, jak sprawić, by lotniska stały się bardziej widoczne.

+1

Czy bierzesz pod uwagę tylko "Lotnisko" lub jakieś słowo alfanumeryczne? – Slowcoder

+5

to nie jest 1NF - powinieneś utworzyć dodatkowy atrybut 'isAirport' –

Odpowiedz

2

Nie wiem, czy poniższa kwerenda obejmuje wszystkie przypadki, ale wydaje się do pracy z danymi próbki:

select name, 
SUBSTRING_INDEX(name,'Airport',1) 
as l, 
LOCATE('Airport',name) as r from 
(
select 'Sydney Airport' as name 
union all 
select 'Sydney' 
union all 
select 'Sydney Ac' 
union all 
select ' 
Mackay Airport' 
union all 
select 'Mackay' 
union all 
select 'Melbourne' 
union all 
select 'Melbourne Airport' 
)a 
order by l asc, r desc 

stół będzie wyglądać

select name 
from table1 
ORDER BY SUBSTRING_INDEX(name,'Airport',1) ASC, 
LOCATE('Airport',name) DESC 
+0

whoa, zapytanie jest znacznie trudniejsze niż sortowanie ręcznie :-) –

+0

:) Wszystkie' unii' w 'FROM' tylko po to, aby uruchomić test bez tworzenia table .... – a1ex07

1

Wydaje się, że można "t zamówienie przez liczbę całkowitą i ciąg jednocześnie, ale można wyprowadzić ciąg na zamówienie w zależności od tego, czy" Airport "jest obecny. To głupie, ale działa:

ORDER BY IF(name NOT LIKE '% Airport', CONCAT(name, ' Birport'), name) 
+1

hmm ... 'Beerport' będzie o 20% chłodniej –

0

Poniższe zapytanie daje oczekiwany wynik (mimo że zapytanie jest skomplikowane).

SELECT t.name 
FROM (
SELECT @num := IF(@num IS NULL, 1, @num+1) AS number, name 
FROM places 
ORDER BY IF ((name LIKE '% Airport'), SUBSTRING(name, 1, LOCATE(' Airport', name) - 1), name)  DESC) t 
ORDER BY t.number DESC; 

Oto przykład.

http://www.sqlfiddle.com/#!2/117b7/80

Powiązane problemy