Node.js + Postgres与最低匹配数据的最高匹配

时间:2013-12-12 12:55:42

标签: node.js postgresql

在我的节点应用程序中,我正在执行一个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,,

帮我解决这个问题..提前谢谢..

1 个答案:

答案 0 :(得分:1)

你可以做两个级别的排序,其中第一级用于区分精确匹配和部分匹配,第二级用于字母排序。例如,

order by case when test_column = input_string then 0
              else 1 end,
         input_string

对于完全匹配,该排序的第一级将为0,否则为1。这样,如果一行完全匹配,那么case语句的计算结果为0,这将把该行放在不精确的匹配之前,case语句的计算结果为1.然后,对于所有具有不精确匹配的行,第一个排序级别将是相同(1),但第二级可能不同,只会给这些行的字母排序。