2013-08-05 99 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" });

希望這有助於。