MySQL - Как сделать заказ? Таблица INNODB
У меня около 20 000 строк в таблице INNODB, называемой "картами", поэтому FULLTEXT не вариант.
Пожалуйста, рассмотрите эту таблицу:
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
Итак, скажем, пользователь ищет "Джон", я хочу, чтобы результирующий набор был в порядке:
7 John Adams
6 John Smith
3 Johnathan Todd
5 Sam John Bond
2 Ted Johnson
Обратите внимание, что мы только вытащили "Джон Смит" однажды, мы взяли его самую последнюю запись. Из-за моих данных, все имена для одного и того же человека, не нужно беспокоиться о двух разных парнях по имени Джон Смит.
Идеи? Дайте мне знать, смогу ли я что-нибудь разъяснить.
Ответы
Ответ 1
версия 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
версия 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