10

私はSQLが実行できるような複雑なクエリを実行する方法を探していましたが、完全にクライアント側です。サーバーからSQLクエリを実行することで、希望どおりの結果を得ることができ、スムーズに見えるようにAJAXを実行することもできます。ただし、拡張性、パフォーマンス、および帯域幅の理由から、これはすべてクライアント側で行うことをお勧めします。

いくつかの要件:

  • 幅広いブラウザ互換性。jQueryを実行できるものなら何でも構いません。私は実際にそれがjQueryプラグインであることを望みます。
  • 複数の列で並べ替えることができます。たとえば、州ごとにアルファベット順に並べ替え、各州内のすべての都市をアルファベット順に一覧表示します。
  • 結果をフィルタリングできます。たとえば、「where state ='CA' or'NY'or'TX'」と同等です。
  • クライアント側で完全に機能する必要があるため、ユーザーは大量のデータを1回ダウンロードするだけで、サーバーからデータを常にフェッチしなくてもデータをカットでき、実際には最初のプル後にすべてのクエリをオフラインで実行できます。

私はstackoverflowを調べて、jslinqを見つけましたが、最後に更新されたのは2009年で、ドキュメントはありません。また、2つの異なる列での順序付けや、「and」または「or」フィルタリングの実行など、より複雑なクエリを実行できるかどうかもわかりません。

このようなことはすでに行われていると思います。HTML5がこの道を歩み始めたのは知っていますが、その後、障害にぶつかりました。基本的なクエリが必要なだけで、結合などは必要ありません。誰かがこれを行うことができる何かを知っていますか?ありがとう。

編集:私が探しているものを明確にするのに役立つユースケースを含めるべきだと思います。

たとえば、私は米国の5000の最大の都市のリストを持っています。各レコードには、Cityname、State、およびPopulationが含まれます。データセット全体を一度ダウンロードしてJS配列にデータセットを設定し、クライアント側でのみ、次のようなクエリを実行して、結果のレコードからテーブルを作成できるようにしたいと思います。

  • カリフォルニアの10の最大の都市
  • 人口が1,000,000人以上の「S」で始まるすべての都市。
  • カリフォルニア、ニューヨーク、フロリダ、テキサス、イリノイの3つの最大の都市で、州、人口の順にアルファベット順に並べています。すなわち、カリフォルニア、ロサンゼルス、3,792,621; カリフォルニア、サンディエゴ、1,307,402; カリフォルニア、サンノゼ、945,942...など。

これらのクエリはすべてSQLを介して行うのは簡単ですが、サーバーを行き来し続けたくはありません。また、オフラインでの使用も許可したいと思います。

4

7 に答える 7

11

http://linqjs.codeplex.com/をご覧ください

それは簡単にあなたのすべての要件を満たします。

于 2012-06-11T01:08:22.483 に答える
5

データがオブジェクトの配列としてメモリに収まる限り、とを使用できsortますfilter。たとえば、商品をフィルタリングするとします。5ドル未満または100ドルを超えるすべての製品を検索し、価格で並べ替える(昇順)。同じ価格の製品が2つある場合は、メーカーで並べ替える(降順)。あなたはこのようにそれをすることができます:

var results = products.filter(function(product) {
    // price is in cents
    return product.price < 500 || product.price > 10000;
});
results.sort(function(a, b) {
    var order = a.price - b.price;
    if(order == 0) {
        order = b.manufacturer.localeCompare(a.manufacturer);
    }
    return order;
});

クロスブラウザの互換性については、シムだけfilterです。

于 2012-06-11T01:12:59.057 に答える
5

Alasql.jsを試してください。これは、JavaScriptのクライアント側SQLデータベースです。

結合とグループ化、さらには結合とwhereパーツの最適化を使用して、複雑なクエリを実行できます。WebSQLは使用しません。

要件のサポート:

  • 幅広いブラウザ互換性-モバイルを含むすべての最新バージョンのブラウザ。
  • 複数の列で並べ替えることができます。-AlasqlはORDERBY句を使用して並べ替えます。
  • 結果をフィルタリングできます。--WHERE句付き。
  • クライアント側で完全に機能する必要があるため、ユーザーは大量のデータを1回ダウンロードするだけで、サーバーからデータを常にフェッチしなくてもデータをカットでき、実際には最初のプル後にすべてのクエリをオフラインで実行できます。-純粋なJavaScript(Array.push()など)操作を使用してデータを変更できます(table.dirtyフラグを設定することを忘れないでください)。

簡単な例を次に示します(jsFiddleで試してみてください)。

// Fill table with data
var person = [ 
    { name: 'bill' , sex:'M', income:50000 },
    { name: 'sara' , sex:'F', income:100000 },
    { name: 'larry' , sex:'M', income:90000 },
    { name: 'olga' , sex:'F', income:85000 },
];

// Do the query
var res = alasql("SELECT * FROM ? person WHERE sex='F' AND income > 60000", [person]);
于 2014-11-06T07:32:50.113 に答える
0

YahooのYQLはどうですか?少しだけ見てきましたが、面白そうです。

于 2012-06-11T01:11:37.543 に答える
0

バックボーンは非常に優れたjsライブラリであり、「キー値バインディングとカスタムイベントを備えたモデル、列挙可能な関数の豊富なAPIを備えたコレクション、宣言型イベント処理を備えたビューを提供することで、Webアプリケーションに構造を提供し、すべてをに接続します。 RESTfulJSONインターフェースを介した既存のAPI。」

これがあなたが探しているものであるかどうかはわかりませんが、モデルをモックアップしてイベントリスナーをそれにバインドするために使用できます。これは、基本的な使用法のいくつかを説明するための良いチュートリアルのようです。

于 2012-06-11T01:15:14.907 に答える
0

CanJSを使用できます。その比較的新しいライブラリは、Backboneやその他よりもパフォーマンスが高く、悪名高いJavaScriptMVCライブラリに基づいています。実際には、JSMVCのMVC部分に少しスパイスが効いています。

net.tutsplus.com http://net.tutsplus.com/tutorials/javascript-ajax/diving-into-canjs-part-3/で、このツタンカーメンを見ることができます。

それはかなり強力で高速です。あなたの人生を楽にするライブバインディングのような機能があります。

于 2012-06-11T01:34:08.267 に答える
0

CoilsはClojurescriptフレームワークであり、Javascroptにコンパイルされ、次のようなクライアント側のSQLクエリを備えています。

(go
    (log (sql "SELECT * FROM test_table where name = ?" ["shopping"] )))

:サーバー側のリレーショナルデータベースに渡されるのは完全なSQLです。

https://github.com/zubairq/coils

于 2014-10-31T13:33:07.207 に答える