2010-12-10 4 views
3

Я пытаюсь составить запрос SQL SELECT с несколькими поисковыми словами. Но я хочу, чтобы результат был упорядочен по количеству совпадений слов.SQL поиск нескольких слов, упорядоченный по количеству совпадений

Например, строка поиска «красный зеленый синий». Я хочу, чтобы результаты содержали все эти три слова сверху, после чего результаты, содержащие два из них, а в конце - только одно слово.

SELECT 
    * 
FROM 
    table 
WHERE 
    (col LIKE '%red%') OR 
    (col LIKE '%green%') OR 
    (col LIKE '%blue%') 
ORDER BY 
    ????? 

Заранее благодарен!

+0

MATCH() AGAINST() не поддерживается движком InnoDB (который является моим). Мне нужно использовать IF() + .... statement –

ответ

5
ORDER BY 
(
CASE 
WHEN col LIKE '%red%' THEN 1 
ELSE 0 
END CASE 
+  
CASE 
WHEN col LIKE '%green%' THEN 1 
ELSE 0 
END CASE 
+  
CASE 
WHEN col LIKE '%blue%' THEN 1 
ELSE 0 
END CASE 
) DESC 

Если DB поставщик имеет IF, вы можете использовать его вместо CASE (например, для Mysql Вы можете написать IF (col LIKE '%red% , 1,0) + IF(....'

 Смежные вопросы

  • Нет связанных вопросов^_^