Поиск сортировать по количеству совпадений параметров в запросе? PostgreSQL - PullRequest
2 голосов
/ 18 июня 2010

Я работаю над поисковым запросом в PostgreSQL, и одна из вещей, которые я делаю, сортирует результаты моего запроса по количеству соответствующих параметров.Я понятия не имею, как это можно сделать.У кого-нибудь есть предложение или решение?

 Table
 brand     color     type     engine
 Ford      Blue      4-door   V8
 Maserati  Blue      2-door   V12
 Saturn    Green     4-door   V8
 GM        Yellow    1-door   V4

 Current Query
 SELECT brand FROM table WHERE color = 'Blue' or type = '4-door' or engine = 'V8'

 Result Should Be
 Ford      (3 match)
 Saturn    (2 match)
 Maserati  (1 match)

Ответы [ 2 ]

2 голосов
/ 18 июня 2010

Я думаю, вы должны сделать:

ORDER BY
    CASE WHEN color = 'Blue' THEN 1 ELSE 0 END +
    CASE WHEN type = '4-door' THEN 1 ELSE 0 END +
    CASE WHEN engine = 'V8' THEN 1 ELSE 0 END DESC
0 голосов
/ 18 июня 2010

Для Mysql это выглядело бы так:

SELECT brand, 
IF(color = 'Blue',1,0)+IF(type = '4-door', 1,0)+IF(engine = 'V8',1,0) 
   AS num_matches
FROM table WHERE color = 'Blue' or type = '4-door' or engine = 'V8'

Перепроверьте синтаксис IF для PostgreSQL. Вы также можете использовать CASE.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...