【问题标题】:Complex SQL query on javascript objectjavascript 对象上的复杂 SQL 查询
【发布时间】:2013-08-05 20:01:37
【问题描述】:

我有以下 JS 对象:

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 的信息,但我遇到了where inhave 表达式的问题。是否有可能使用 SQL-JS 库或 JS/jQuery 本身(编写函数等)对 javascript 对象执行此类查询?

【问题讨论】:

    标签: javascript sql


    【解决方案1】:

    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)。

    【讨论】:

      【解决方案2】:

      我不太明白你在问什么,但是使用 jQuery 你可以按如下方式过滤组对象:

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

      希望有所帮助。

      【讨论】:

        猜你喜欢
        • 2018-02-08
        • 2015-03-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多