博士后&x2B;node.js查询组合

博士后&x2B;node.js查询组合,node.js,postgresql-9.1,Node.js,Postgresql 9.1,我是这个node.js和postgres的新手。。我正在执行两个查询(select),我必须将这两个查询输出组合成一个结果。另外,我必须先显示第一个结果,然后是第二个查询。。我有以下代码,但我没有达到要求。此外,我不确定我的代码是否正确。如果有,请提出其他想法 我的代码: client.query("select * from tn_village where level3 ILIKE '%"+villagename+"%' OR level4 ILIKE '%"+villagename+"

我是这个node.js和postgres的新手。。我正在执行两个查询(select),我必须将这两个查询输出组合成一个结果。另外,我必须先显示第一个结果,然后是第二个查询。。我有以下代码,但我没有达到要求。此外,我不确定我的代码是否正确。如果有,请提出其他想法

我的代码:

  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);
    });
    });
如何将结果和结果1合并为单个输出..请帮助我解决此问题..提前感谢

编辑:


另外,我想我有疑问,您的代码是否会先显示第一个查询的输出,然后再显示第二个查询的输出???

好吧,只需按照您的布局方式(尽管我更喜欢在节点中聚合多个异步调用):

这是我能想到的最简单的例子,可以告诉你这应该是多么容易。现在,如果你想在result和result1上进行某种循环,将它们组合在一起,等等,或者如果你想把两个数组连接成一个,等等,所有这些问题都不清楚,但是很容易做到

让我知道,如果有澄清。本质上,“result”的值在内部回调中仍然可用,因此您可以在res.send中使用它


PS-不一定需要嵌套的嵌套调用有点烦琐,promises或其他回调聚合器在这里会有所帮助。

为什么不使用anync.parallel???谢谢@sunny1304..我是新手..所以我对node.js不太了解..无论如何我会寻找..但是看看@Nick Sharp answer,如果我知道只有1个查询结果返回…这有什么不对…是的,我在这里,但你的意思是,result1是null还是空白,并且只设置了result?因为在这种情况下,第二轮的查询听起来可能是“坏的”,因为它不返回任何数据。是的,在第二次查询的回调中,您可以访问这两个变量。。。因此,现在由您决定(然后向我们澄清)您希望您的返回格式是什么。。。它不会“显示”任何内容,只会返回一个json。当然,在您的编辑中,使用该插槽中的result1,它将显示第二个查询的输出,因为这是您在第二个查询的回调中使用的变量名。我必须将组合输出显示为json,第一个数据应该是第一次查询的结果,然后是第二个..我必须为此做些什么?返回的格式是json..祝贺你,你似乎很接近了--你只需要后退一步,仔细看看,并找出你的需求。
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);      
});
}); 
});
 client.query("select ...",function(err,result) {
    client.query("select ..." ,function(err,result1) {  
        var ret = {
            result: result,
            result1: result1
        }
        res.send(ret);
    });
 });