在我的节点应用程序中,我正在执行一个select查询。假设用户输入的内容为“abcdef”.i将从该字符串中的前4个字母说“abcd”,我将检查匹配“abcd”的条目ILIKE
命令。
我的查询是:
client.query("select * from tn_village where level3 ILIKE '%"+substring+"%' OR level4 ILIKE '%"+substring+"%' OR level5 ILIKE '%"+substring+"%' OR level6 ILIKE '%"+substring+"%' OR level7 ILIKE '%"+substring+"%' OR level8 ILIKE '%"+substring+"%' OR level9 ILIKE '%"+substring+"%'" ,function(err,result)
{
res.send(result);
});
这里substring是“abcd”..我按字母顺序得到结果。. But what i want is i have to show the row which is exactly matching first say row for "abcde" first and then the remaining results,,
帮我解决这个问题..提前谢谢..
答案 0 :(得分:1)
你可以做两个级别的排序,其中第一级用于区分精确匹配和部分匹配,第二级用于字母排序。例如,
order by case when test_column = input_string then 0
else 1 end,
input_string
对于完全匹配,该排序的第一级将为0,否则为1。这样,如果一行完全匹配,那么case语句的计算结果为0,这将把该行放在不精确的匹配之前,case语句的计算结果为1.然后,对于所有具有不精确匹配的行,第一个排序级别将是相同(1),但第二级可能不同,只会给这些行的字母排序。