Подтвердить что ты не робот

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

Обратите внимание, что мы только вытащили "Джон Смит" однажды, мы взяли его самую последнюю запись. Из-за моих данных, все имена для одного и того же человека, не нужно беспокоиться о двух разных парнях по имени Джон Смит. Идеи? Дайте мне знать, смогу ли я что-нибудь разъяснить.

4b9b3361

Ответ 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