1

我正在编写 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查询不是那么容易,在WHERE中有很多连接和很多OR)

艾坦

4

1 回答 1

5

如果是 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 服务器:

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
于 2010-04-21T08:54:17.747 回答