2013-02-20 67 views
6

मैं निम्नलिखित परिणाम है कहते हैं:परिभाषित कोलेशन के बिना MySQL स्ट्रिंग परिणाम ऑर्डर करना?

Mackay 
Mackay Airport 
Melbourne 
Melbourne Airport 
Sydney 
Sydney Ac 
Sydney Airport 

मैं इसे इसलिए वे हमेशा उनमें से शीर्ष पर हवाई अड्डे के साथ आदेश दिया जाता है कैसे कर सकते हैं? वर्णक्रम, जैसे:

Mackay Airport 
Mackay 
Melbourne Airport 
Melbourne 
Sydney Airport 
Sydney 
Sydney Ac 

थोड़ा कैसे हवाई अड्डों अधिक प्रमुख बनाने के लिए पर उलझन में।

+1

क्या आप केवल "हवाईअड्डा" या कोई अल्फान्यूमेरिक शब्द मानते हैं? – Slowcoder

+5

यह 1 एनएफ नहीं है - आपको अतिरिक्त विशेषता 'isAirport' –

उत्तर

2

सुनिश्चित नहीं हैं कि अगर निम्न क्वेरी सभी मामलों को शामिल किया गया है, लेकिन यह अपने नमूना डेटा के साथ काम करने लगता है:

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 

तालिका के साथ यह कैसा दिखाई देगा

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

व्हाओ बनाना चाहिए, क्वेरी हाथ से सॉर्ट करने से कहीं अधिक कठिन है :-) –

+0

:) सभी' यूनियन ''' से '' '' '' '' '' '' '' टेबल .... – a1ex07

1

ऐसा लगता है कि आप कर सकते हैं एक साथ पूर्णांक और स्ट्रिंग द्वारा क्रमबद्ध नहीं है, लेकिन आप "एयरपोर्ट" मौजूद है या नहीं, इस आधार पर क्रमबद्ध करने के लिए स्ट्रिंग प्राप्त कर सकते हैं। यह मूर्खतापूर्ण है, लेकिन यह काम करता है:

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

हम्म ... 'बेरपोर्ट' 20% कूलर होगा –

0

निम्न क्वेरी आप उम्मीद उत्पादन दे देंगे (भले ही क्वेरी जटिल है)।

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; 

यहां उदाहरण है।

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