Как бы я упорядочил таблицу по количеству совпадающих параметров в предложении where оператора SQL? - PullRequest
1 голос
/ 21 апреля 2010

Я пишу sql для поиска в базе данных по ряду параметров. Как бы я упорядочил результирующий набор по элементам, которые соответствуют большинству параметров в предложении where. Например:

SELECT * 
FROM users 
WHERE username = 'eitan' 
OR email = 'eitan@eitan.com' 
OR company = 'eitan'


Username   |  email                |   company

1) eitan   |     blah@blah.com     |     blah

2) eitan   |     eitan@eitan.com   |    eitan

3) eitan   |    eitan@eitan.com    |     blah

следует заказать как:

2, 3, 1.

Спасибо. (ps запрос не так прост, имеет много объединений и много OR в WHERE)

Эйтан

1 Ответ

5 голосов
/ 21 апреля 2010

Если MySQL:

SELECT * FROM users 
ORDER BY 
    (username = 'eitan') 
    + (email = 'eitan@eitan.com') 
    + (company = 'eitan') 
    DESC

Если PostgreSQL:

SELECT * FROM users 
ORDER BY 
    (username = 'eitan')::int 
    + (email = 'eitan@eitan.com')::int 
    + (company = 'eitan')::int 
    DESC

Если Sql Server:

SELECT * FROM users 
ORDER BY 
    case when username = 'eitan' then 1 else 0 end
    + case when email = 'eitan@eitan.com' then 1 else 0 end
    + case when company = 'eitan' then 1 else 0 end
    DESC
...