MySQL ORDER BY CASE + оператор - PullRequest
       19

MySQL ORDER BY CASE + оператор

0 голосов
/ 17 марта 2019

Я пытаюсь выполнить поиск, который будет отсортирован по релевантности. Допустим, поисковый термин содержит 3 слова: A, B и C. То, что я пытаюсь сделать, это проверить, присутствует ли поисковый термин в результатах SELECT, и если да, это повысит его рейтинг.

ORDER BY CASE
(
WHEN search_word_A_is_present THEN +1
WHEN search_word_B_is_present THEN +1
WHEN search_word_C_is_present THEN +1
ELSE 0
END
) 
DESC

Хотя нет синтаксической ошибки, и поиск запускается и сортируется по чему-то (что отличается от того, что я хочу), но я не уверен, что добавляется, если что-нибудь. Как бы я узнал, каков окончательный ранг (сумма) в конце для каждого результата? Это правильный способ сделать это?

1 Ответ

1 голос
/ 17 марта 2019

Так как в логических условиях MySQL получаются 1 и 0, вы можете просто добавить их

ORDER BY search_word_A_is_present + search_word_B_is_present + search_word_C_is_present 
DESC

Более практичный пример:

ORDER BY col1 = 1 + col2 = 'A' + col3 = 44 DESC
...