2013-12-12 38 views
-1

在我的節點應用程序中,我正在執行選擇查詢。假設用戶將輸入作爲「abcdef」.i將從該字符串中取前4個字母稱爲「abcd」,我將使用ILIKE命令檢查與「abcd」匹配的條目。Node.js + Postgres最高匹配到最低匹配數據

我的查詢是:

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); 
}); 

下面子是 「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,,

幫我解決this..Thanks提前..

+0

你可以說爲什麼它downvoted ?? – Subburaj

+0

不知道你爲什麼被低估。該查詢不包含order by子句,因此可能並不完全清楚您已經嘗試了哪些內容(儘管提到您在文本中有字母順序排序),並且看起來可能存在一些無關信息(如提及你正在接受一個子字符串)。無論哪種方式,希望我的回答有幫助。 – yieldsfalsehood

+0

哦,並確保你正在消毒你的輸入 - 如果你只是在你的查詢中嵌入你的子字符串,而不採取任何預防措施(如使用佔位符而不是字符串連接),你就會暴露自己的sql注入。 – yieldsfalsehood

回答

1

你可以做排序,其中第一級是用來精確匹配和部分匹配和字母排序第二級區分的兩個層次。例如,

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

是排序的第一級爲0的精確匹配,否則爲1。這樣,如果一行匹配的確切,那麼case語句的計算結果爲0,這將把該行放在不完全匹配之前,case語句的計算結果爲1.然後,對於所有具有不完全匹配的行,第一個排序級別將是相同(1),但第二級可能會有所不同,並將簡單地給這些行的字母排序。