У меня есть база данных названий песен. Каждому названию песни присвоен целочисленный балл. Чем выше оценка, тем выше место на моем сайте.
Таким образом, если «Lady Gaga — Poker Face» набрала 23039 баллов, а «Eminem — Not Afraid» — 13400 баллов, Lady Gaga будет выше Эминема.
Это, конечно, достигается с помощью простого ORDER BY score DESC.
Однако на моем веб-сайте также есть функция поиска, где люди могут ввести ключевую фразу, чтобы получить список названий песен. Я делаю это с помощью запроса MATCH() AGAINST() следующим образом:
Способ 1
SELECT * FROM links MATCH(songtitle) AGAINST({the keyword}) LIMIT 5';
Это работает, но я хочу отобразить эти 5 результатов в порядке их оценки. Однако, если я выполню этот запрос вместо этого:
Способ 2
SELECT * FROM links MATCH(songtitle) AGAINST({the keyword}) ORDER BY score DESC LIMIT 5';
Тогда порядок релевантности полностью теряется. Я хочу упорядочить возвращаемые результаты как по баллам, так и по релевантности.
Возьмите этот пример набора данных и сценариев:
Набор данных:
song title | score
pink - sober | 2002
pink - funhouse | 2001
pink floyd - high hopes | 2000
pink floyd - on the run | 1999
pink floyd - brain damage | 1998
pink floyd - money | 1997
pink floyd - time | 1996
Сценарии:
Когда вы ищете «Pink Floyd» с помощью метода first, описанного выше, вы получаете 5 песен Pink Floyd в случайном порядке. Это здорово, но я хочу, чтобы песни, которые возвращаются, были отсортированы по их количеству в порядке убывания. Таким образом, вы добавляете «ORDER BY score DESC» к первому методу, и это дает вам второй метод выше...
Когда вы ищете «Pink Floyd» с помощью второго метода, описанного выше, вы получаете песни Pink Floyd в правильном порядке (упорядоченные по партитуре DESC), но теперь вы также получаете две песни поп-исполнителя «Pink». , потому что в базе есть 2 песни Pink с более высоким баллом, чем любая из песен Pink Floyd.
Желаемые результаты:
Поиск по запросу «Pink Floyd» возвращает все 5 песен Pink Floyd, отсортированные по назначенному им количеству баллов в порядке убывания.
Поиск «Pink» возвращает две песни Pink в порядке убывания присвоенного им балла. Если песни Pink Floyd появятся после обеих песен Pink, это тоже будет хорошо.
Видишь, что я имею в виду? Дайте мне знать, если вам нужны какие-либо разъяснения!
Дэйв