Javascript 如何在客户端浏览器中执行类似SQL的查询?

Javascript 如何在客户端浏览器中执行类似SQL的查询?,javascript,jquery,sql,Javascript,Jquery,Sql,我一直在寻找一种方法来完成复杂的查询,比如SQL可以执行但完全是客户端的查询。我知道我可以通过在服务器上执行SQL查询得到我想要的确切结果,我甚至可以使用AJAX使其看起来平滑。然而,出于可扩展性、性能和带宽的原因,我更愿意在客户端完成这项工作 一些要求: 广泛的浏览器兼容性。任何可以运行jQuery的东西都可以。实际上,我更希望它是一个jQuery插件 可以对多个列进行排序。例如,按州字母顺序排列,并按每个州的字母顺序列出所有城市 可以过滤结果。例如,相当于“where state='CA'

我一直在寻找一种方法来完成复杂的查询,比如SQL可以执行但完全是客户端的查询。我知道我可以通过在服务器上执行SQL查询得到我想要的确切结果,我甚至可以使用AJAX使其看起来平滑。然而,出于可扩展性、性能和带宽的原因,我更愿意在客户端完成这项工作

一些要求:

  • 广泛的浏览器兼容性。任何可以运行jQuery的东西都可以。实际上,我更希望它是一个jQuery插件
  • 可以对多个列进行排序。例如,按州字母顺序排列,并按每个州的字母顺序列出所有城市
  • 可以过滤结果。例如,相当于“where state='CA'或'NY'或'TX'”
  • 必须完全在客户端工作,因此用户只需下载一次大型数据集,就可以随心所欲地剪切数据,而无需不断从服务器获取数据,并且在初始拉取后,实际上可以脱机执行所有查询
我环顾了stackoverflow,发现了jslinq,但它最后一次更新是在2009年,没有文档。我也不知道它是否可以执行更复杂的查询,比如在两个不同的列上排序,或者执行“and”或“or”过滤

我想像这样的事情应该已经做了。我知道HTML5在这条道路上起步,但后来遇到了障碍。我只需要基本的查询,没有连接或任何东西。有人知道有什么东西可以做到这一点吗?谢谢

编辑:我认为我应该包括一个用例来帮助澄清我在寻找什么

例如,我有一份美国5000个最大城市的名单。每个记录包括城市名称、州和人口。我希望能够下载整个数据集一次,并用它填充一个JS数组,然后,仅在客户端,能够运行如下查询,并从结果记录创建一个表

  • 加州十大城市
  • 所有以“S”开头且人口在1000000或以上的城市
  • 加利福尼亚州、纽约州、佛罗里达州、德克萨斯州和伊利诺斯州最大的三个城市,按州和人口的字母顺序排列。i、 东加利福尼亚州,洛杉矶,3792621;加利福尼亚州圣地亚哥,1307402;加利福尼亚州,圣何塞,945942…等
通过SQL执行所有这些查询都很简单,但我不想一直往返于服务器,我还想允许脱机使用。

看看


它很容易满足您的所有要求。

雅虎的呢?我只是简单地看了一下,但它看起来很有趣。

只要数据可以作为对象数组放入内存中,就可以使用and。例如,假设您要筛选产品。您希望找到所有低于5美元或高于100美元的产品,并希望按价格排序(升序),如果有两个产品的价格相同,则按制造商排序(降序)。你可以这样做:

(go
    (log (sql "SELECT * FROM test_table where name = ?" ["shopping"] )))
var results=products.filter(函数(产品)){
//价格以美分为单位
退货产品.价格<500 | |产品.价格>10000;
});
结果.排序(函数(a,b){
var订单=a.价格-b.价格;
如果(顺序==0){
订单=b.manufacturer.localeCompare(a.manufacturer);
}
退货单;
});
为了实现跨浏览器的兼容性,just shim
filter

是一个非常好的js库通过提供具有键值绑定和自定义事件的模型、具有可枚举函数的丰富API的集合、具有声明性事件处理的视图,为web应用程序提供结构,并通过RESTful JSON接口将其全部连接到现有API

我不确定这是否是您想要的,但您可以使用它来模拟您的模型并将事件侦听器绑定到它。这似乎是一个很好的教程,可以了解它的一些基本用法。

您可以使用。它是一个相对较新的库,性能优于主干和其他库,并且基于臭名昭著的JavaScript MVC库。In Reality,它是JS MVC的MVC部分,带有一点香料

您可以通过net.tutsplus.com查看此图坦卡蒙


它功能强大、速度快。具有像live binding这样的功能,让您的生活变得轻松。

Coils是一个Clojurescript框架,可编译为Javascropt,并具有如下客户端SQL查询:

(go
    (log (sql "SELECT * FROM test_table where name = ?" ["shopping"] )))
:传递到服务器端关系数据库的是完整SQL:

试试。这是一个javascript客户端SQL数据库

您可以使用连接和分组进行复杂查询,甚至可以优化连接和where部分。它不使用WebSQL

您的需求支持:

  • 广泛的浏览器兼容性-所有现代版本的浏览器,包括手机
  • 可以对多个列进行排序。-Alasql使用ORDERBY子句进行排序
  • 可以筛选结果。-使用WHERE子句
  • 必须完全在客户端工作,这样用户只需下载一次大数据集,就可以随心所欲地剪切数据,而无需不断从服务器获取数据,事实上,在初始拉取之后,就可以脱机执行所有查询。-您可以使用纯JavaScript(Array.push()等)操作来修改数据(不要忘记设置table.dirty标志)
下面是一个简单的示例(在中使用):


广泛的浏览器兼容性。
似乎是不可能的。很好的发现。你知道它可以做很多事情!LinqJS在DOM上作为数据源?或者在JavaScript对象?阅读项目主页,但我不是100%清楚。我已经与jQuery集成,并与它的集合一起工作。我已经看过了。但是(由于缺乏任何文档)我无法判断它是否可以执行更复杂的查询,如级联排序。请参阅原始帖子的更新以了解用例。令人困惑的是,codeplex同时包含了linqjs和jslinq。我之前看到的是js