MySQL - jak zamawiać według trafności? Stół INNODB
Mam około 20 000 wierszy w tabeli INNODB zwanej 'kartami' , więc pełny tekst nie wchodzi w grę.
Proszę wziąć pod uwagę tę tabelę:
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
Więc powiedzmy, że użytkownik wyszukuje 'John', chcę, aby wynik ustawiony był w kolejności:
7 John Adams
6 John Smith
3 Johnathan Todd
5 Sam John Bond
2 Ted Johnson
Zauważ, że wyciągnęliśmy "Johna Smitha" tylko raz, wzięliśmy jego najnowszy wpis. Ze względu na moje dane, wszystkie nazwiska są dla tej samej osoby, nie musisz się martwić o dwóch różnych facetów o imieniu John Smith. Pomysły? Daj mi znać, jeśli mogę wyjaśnić cokolwiek.
34
1 answers
Wersja 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
Wersja 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
110
Author: manji,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-10-19 16:25:49
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-10-19 16:25:49