2013-08-05 102 views
4

我有以下的JS对象:复杂的SQL查询JavaScript对象

var groups = [{id="4", name="abcd", id_group="1"}, 
       {id="5", name="efgh", id_group="1"}, 
       {id="6", name="ijkl", id_group="1"}, 
       {id="4", name="abcd", id_group="2"}, 
       {id="7", name="mnop", id_group="2"}] 

,我需要上述对象上执行此SQL查询:

select id_group from groups where id in (4,7) 
group by id_group having count(distinct id) = 2 

的结果应该是:

id_group="2" 

,因为只有该组包含在查询中使用的两个ID。

我发现了大约SQLikeJSLINQ资料,但我已经在和表达式中遇到的问题与哪里。有没有可能在JavaScript对象上使用SQL-JS库或JS/jQuery本身执行此类查询(编写函数等)?

回答

0

Alasql的JavaScript SQL库是特别设计为这种类型的任务:

<script src="alasql.min.js"></script> 
<script> 
    var groups = [{id:4, name:"abcd", id_group:"1"}, 
      {id:5, name:"efgh", id_group:"1"}, 
      {id:6, name:"ijkl", id_group:"1"}, 
      {id:4, name:"abcd", id_group:"2"}, 
      {id:7, name:"mnop", id_group:"2"}]; 

    var res = alasql('select id_group, count(id) as cnt from ? \ 
     where id in (4,7) group by id_group having cnt = 2',[groups]); 
</script> 

你可以尝试的jsfiddle this example

我修改了一点SQL表达式,因为Alasql不支持HAVING子句中的聚合函数(如COUNT,SUM,MAX,MIN)。

1

我不太明白你问什么,但使用jQuery可以过滤组对象,如下所示:

var filteredArr = $.grep(groups, function(obj, index){ return obj.id_group === "2" });

希望这有助于。