У меня есть база данных названий песен.Каждому названию песни присваивается целое число баллов.Чем выше балл, тем выше его рейтинг на моем сайте.
Так что, если у "Lady Gaga - Poker Face" счет 23039, а у "Eminem - Not Afraid" 13400, то Lady Gaga будетвыше Eminem.
Это, конечно, достигается простой оценкой ORDER BY 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», используя second указанным выше способом, вы получаете песни Pink Floyd в правильном порядке (по заказу партитуры DESC), но теперь вы также получаете две песни поп-артиста "Pink", потому что в базе данных есть 2 песни Pink с более высоким балломчем любая из песен Pink Floyd.
Желаемые результаты:
Поиск "Pink Floyd" возвращает все 5песни pink floyd, упорядоченные по назначенному партитуре в порядке убывания.
Поиск «Pink» возвращает две песни Pink в порядке убывания их назначенного партитуры.Если бы песни Pink Floyd появлялись после обеих песен Pink, это тоже было бы хорошо.
Видите, что я имею в виду?Дайте мне знать, если вам нужны какие-либо разъяснения!
Дейв