MySQL сортирует результаты по релевантности
Я пытаюсь отсортировать фильмы по их релевантности.
Вот необработанные результаты Myqsl Query.
21126 A Frozen Flower
4557 Cashback
4504 Frozen
36645 Frozen
509 Frozen Assets
20649 Frozen Flesh
24752 Frozen Kiss
25675 Frozen Land
4783 Frozen River
11798 Frozen River
11856 Frozen Scream
21755 Frozen Silence
26333 Frozen Thrills
8532 Frozen Water
16196 God Don't Make the Laws
6158 The Frozen Ground
28160 The Thaw
7320 Winter of Frozen Dreams
Текущий код я использую
SELECT * FROM `movies`
WHERE `Title` LIKE '%Frozen%'
OR `other_title` LIKE '%Frozen%'
GROUP BY `Title` ORDER BY CASE
WHEN `Title` = 'Frozen' THEN 0
WHEN `Title` like 'Frozen%' THEN 1
WHEN `Title` like '% %Frozen% %' THEN 2
WHEN `Title` like '%Frozen' THEN 3
ELSE 4
END, `Title`
и вот результаты
4504 Frozen
509 Frozen Assets
20649 Frozen Flesh
24752 Frozen Kiss
25675 Frozen Land
4783 Frozen River
11856 Frozen Scream
21755 Frozen Silence
26333 Frozen Thrills
8532 Frozen Water
21126 A Frozen Flower
6158 The Frozen Ground
7320 Winter of Frozen Dreams
4557 Cashback
16196 God Don't Make the Laws
28160 The Thaw
Хорошо, результаты выглядят довольно хорошо, за исключением того, что там, где были повторяющиеся заголовки, они не отображались.
Любая идея, как исправить эту проблему??
2 ответа
Решение
Дубликат удаляется group by
, Просто удалите это:
SELECT *
FROM `movies`
WHERE `Title` LIKE '%Frozen%' OR `other_title` LIKE '%Frozen%'
ORDER BY (CASE WHEN `Title` = 'Frozen' THEN 0
WHEN `Title` like 'Frozen%' THEN 1
WHEN `Title` like '% %Frozen% %' THEN 2
WHEN `Title` like '%Frozen' THEN 3
ELSE 4
END), `Title`
Для меня это звучит так, как будто вы захотите использовать функцию поиска на естественном языке в MySQL. Это позволит вам сопоставить критерии поиска по нескольким полям и автоматически отсортировать их по релевантности.
Смотрите эту ссылку для более подробной информации: http://dev.mysql.com/doc/refman/5.5/en/fulltext-natural-language.html