2009-10-19 16 views
34

'Kartlar' adı verilen INNODB tablosunda yaklaşık 20.000 satır var, bu nedenle FULLTEXT bir seçenek değil. Ben sırasına göre olmak set sonucu istiyoruz, YaniMySQL - İLGİLİ NASIL TESLİM ALABİLİRİM? INNODB Tablo

id  |  name  |  description 
---------------------------------------------------------- 
1  John Smith  Just some dude 
2  Ted Johnson  Another dude 
3  Johnathan Todd This guy too 
4  Susan Smith  Her too 
5  Sam John Bond And him 
6  John Smith  Same guy as num 1, another record 
7  John Adams  Last guy, promise 

'John' için kullanıcı aramalarından ki::

bu tabloyu dikkate alınız

7  John Adams 
6  John Smith 
3  Johnathan Todd 
5  Sam John Bond 
2  Ted Johnson 

Lütfen dikkat edelim Sadece John Smith'i çekti, en son girişini aldık. Verilerimden dolayı, tüm isimler aynı kişi için, John Smith adında 2 farklı erkek için endişelenmenize gerek yok. Fikirler? Bir şeyi açıklığa kavuşturursam haber ver.

+1

Sen değil alakaya göre (ancak bunu tanımlamak) "Soyadı, Adı" tarafından sipariş etmek istiyorum görünmektedir. Bu doğru mu? – Tomalak

cevap

110

sürüm 1:

SELECT max(id) id, name 
    FROM cards 
WHERE name like '%John%' 
GROUP BY name 
ORDER BY CASE WHEN name like 'John %' THEN 0 
       WHEN name like 'John%' THEN 1 
       WHEN name like '% John%' THEN 2 
       ELSE 3 
      END, name 

sürüm 2:

SELECT max(id) id, name 
    FROM cards 
WHERE name like '%John%' 
GROUP BY name 
ORDER BY CASE WHEN name like 'John%' THEN 0 
       WHEN name like '% %John% %' THEN 1 
       WHEN name like '%John' THEN 2 
       ELSE 3 
      END, name 
+0

Harika! Tam istediğim gibi çalışır. Teşekkürler najmeddine! – k00k

+1

yardım etmekten memnun. Daha fazla davayı ele almak için biraz değiştirdim. – manji

+0

Sanırım başka bir şey benim özel durumumda daha iyi çalışıyor, ama ikisi de başkalarına yardımcı olabilir, hem oraya hem de gelecek için koyabilir misiniz? – k00k