SQL是否可以根据匹配的条件对返回的行进行不同的排序?
例如,我的网页允许输入姓名或邮政编码。查询当前按姓氏,名字排序。这很好,除非他们输入一个邮政编码,然后我想通过邮政编码而不是名字来订购结果。那可能吗?我希望这发生在同一个查询而不是两个。一个潜在的问题:如果输入的值与name和zip匹配怎么办?
谢谢!
伪查询:
SELECT firstName, lastName, zip
From Users
WHERE (FirstName LIKE 'search' OR LastName LIKE 'search' OR Zip LIKE 'search')
ORDER BY LastName, FirstName
答案 0 :(得分:1)
由于查询是以猜测哪个字段与搜索条件匹配的方式制定的,因此您可能想尝试猜测ORDER BY
中哪个字段匹配:
SELECT firstName, lastName, zip
From Users
WHERE (FirstName LIKE 'search' OR LastName LIKE 'search' OR Zip LIKE 'search')
ORDER BY
CASE WHEN FirstName LIKE 'search' THEN FirstName ELSE NULL END
, CASE WHEN LastName LIKE 'search' THEN LastName ELSE NULL END
, CASE WHEN Zip LIKE 'search' THEN Zip ELSE NULL END
当然,这假定'search'
代表您传递给查询的内容,它是LIKE
运算符的有意义参数,即具有元字符,格式正确,等等
答案 1 :(得分:0)
SELECT firstName, lastName, zip From Users
WHERE (FirstName LIKE '%search%' OR LastName LIKE '%search%' OR Zip LIKE '%search%')
ORDER BY LastName, FirstName
如果可能,尝试用=替换LIKE。它提高了查询的速度。 无论如何,你为什么不做一个if-else块呢?
伪代码:
if (input = name){
SELECT firstName, lastName, zip From Users
WHERE (FirstName LIKE '%search%' OR LastName LIKE '%search%')
ORDER BY LastName, FirstName
}
else if (input = zipcode) {
SELECT firstName, lastName, zip From Users
WHERE Zip LIKE '%search%'
ORDER BY zip
}