2013-12-13 25 views
0

我是新來的這個node.js和postgres ..我執行2個查詢(選擇),我必須將這2個查詢輸出結合到一個單一的結果。此外,我必須使第一個結果出現第一,然後第二個查詢..我有以下代碼,但我沒有達到要求。另外我不知道該代碼,我是correct..Suggest其他的想法,如果你有..postgres + node.js查詢組合

我的代碼:

client.query("select * from tn_village where level3 ILIKE '%"+villagename+"%' OR level4 ILIKE '%"+villagename+"%' OR level5 ILIKE '%"+villagename+"%' OR level6 ILIKE '%"+villagename+"%' OR level7 ILIKE '%"+villagename+"%' OR level8 ILIKE '%"+villagename+"%' OR level9 ILIKE '%"+villagename+"%'",function(err,result) 
    { 
    client.query("select * from tn_village where level3 ILIKE '%"+village+"%' OR level4 ILIKE '%"+village+"%' OR level5 ILIKE '%"+village+"%' OR level6 ILIKE '%"+village+"%' OR level7 ILIKE '%"+village+"%' OR level8 ILIKE '%"+village+"%' OR level9 ILIKE '%"+village+"%'" ,function(err,result1) 
    {  
    res.send(result1); 
    }); 
    }); 

我怎麼能結合的結果和RESULT1到一個output..Help我解決this..Thanks提前..

編輯:

client.query("select * from tn_village where level3 ILIKE '%"+villagename+"%' OR level4 ILIKE '%"+villagename+"%' OR level5 ILIKE '%"+villagename+"%' OR level6 ILIKE '%"+villagename+"%' OR level7 ILIKE '%"+villagename+"%' OR level8 ILIKE '%"+villagename+"%' OR level9 ILIKE '%"+villagename+"%' ",function(err,result) 
{ 
client.query("select * from tn_village where level3 ILIKE '%"+village+"%' OR level4 ILIKE '%"+village+"%' OR level5 ILIKE '%"+village+"%' OR level6 ILIKE '%"+village+"%' OR level7 ILIKE '%"+village+"%' OR level8 ILIKE '%"+village+"%' OR level9 ILIKE '%"+village+"%'" ,function(err,result1) 
{ 
var ret = { 
      result: result,----------->if i put result1 here only the 2nd query output is showing. If i put result only 1st query output is shown.. 
      result1: result1 
     }  


res.send(ret); 
//res.send(result1);  
}); 
}); 
}); 

此外,我想我有疑問,你的代碼是否會先顯示第一次查詢的輸出第二查詢輸出?

+0

爲什麼不使用anync.parallel ??? – sunny1304

+0

謝謝@ sunny1304 ..我是新來的這個..所以我不知道深入node.js..Anyway我會尋找那..但看@ 尼克夏普的答案,如果我遵循,只有1個查詢結果正在返回...這是什麼意思.. – Subburaj

回答

1

好了,只要按照你擁有了它奠定了(雖然我更喜歡承諾,即使在節點聚合多個異步調用)的方式:這是最簡單的例子,我能想到的

client.query("select ...",function(err,result) { 
    client.query("select ..." ,function(err,result1) { 
     var ret = { 
      result: result, 
      result1: result1 
     } 
     res.send(ret); 
    }); 
}); 

向您展示如何容易這應該是。現在,例如,如果您正在考慮對結果和結果1進行某種循環,那麼它們會將它們組合在一起等,或者如果要將兩個數組連接成一個等等,所有這些都不是您的問題清楚的,但是很容易做到。

讓我知道是否澄清了。實質上,內部回調中仍然可以使用「result」的值,所以您可以在res.send中使用它。

PS - 不一定需要嵌套的嵌套調用有點不禮貌,承諾或其他回調聚合器將在這裏幫助。

+0

謝謝@尼克夏普..它只返回第一個查詢結果.. – Subburaj

+0

是的,我在這裏,但你是什麼意思,是result1 null或空白,只有結果設置?因爲在這種情況下,聽起來好像你對第二輪的查詢可能只是「不好」,因爲它不返回任何數據。 –

+0

是的,在第二個查詢的回調中,你可以訪問這兩個變量......所以現在它由你來確定(然後向我們澄清)你想要的返回格式是什麼......它不會「顯示」任何東西,它只會返回一個JSON。並且在編輯當然在該槽中使用result1時,它將顯示第二個查詢的輸出,因爲這是您在第二個查詢的回調中使用的變量名稱。 –