1

(このプロジェクトはすべてJSで書かれています)

というテーブルがありpaid_offers、 と という名前の 2 つの列 がoffer_idあります。entity_idoffer_identity_id

編集:例: entity_id A には 35 個のオファーがあります (つまり、35 行に一意の offer_id がありますが、entity_id はすべて同じです)。

したがって、カウントを取得することは問題ありませんarrayList.lengthが、実際の配列を取得する方法が必要なだけです。助けてくれてありがとう!

編集:リクエストに応じて、詳細情報!出力を配列として使用します。

したがって、このプロジェクトは Titanium (Appcelerator から) を使用して記述されています。クエリ以外は何も必要ありません。ですから、知らない人のために、ここの引用符の中にあるものです。

var offersList = db.execute("SELECT entity_id FROM paid_offers");

ここでの目標は、ID のリストを取得することではなく、offer_idそれぞれの一意の値に関連付けられた値のリストを取得するentity_idことです。私はそれが次のように見えると思います:

var offersList = db.execute("SELECT offer_id FROM paid_offers WHERE entity_id = entity_id

それがうまくいかないことを除いて、それはこれを見ながら私の思考の流れです.

4

4 に答える 4

2

各エンティティのオファーをカウントしようとしている場合は、

SELECT entity_id, COUNT(offer_id) As Count
FROM   paid_offers
GROUP BY entity_id

これは、少なくとも 1 つのオファーを持つエンティティのみを検索します。

于 2012-06-30T19:45:50.943 に答える
1

あなたが求めているのはこれだと思います...

SELECT offer_id, COUNT(*) As Count
FROM   paid_offers
GROUP BY offer_id

それは次のようなものを与えるでしょう。

offer_id   Count
1          1
2          4
3          2
...

テーブルに存在しない offer_id は除外されるため、カウントが 0 になることはありません。

Array.length() を使用してカウントを行う際のもう 1 つの注意事項 - (潜在的に大きい) レコードセットを JS に返し、JS はそれをカウントします。これは多くの利点を得るために多くのリソースを使用COUNTします。(上記のように) SQL で実行し、結果を取得することをお勧めします。

于 2012-06-30T18:55:14.850 に答える
1

結果の各列は常に単一の値にしかできないため、これは単純ではなく、純粋な SQL では可能ではありませんが、リストが必要です。代わりにこのアプローチを試してください。

select entity_id, offer_id
from paid_offers

JavaScript では、結果を読み取り、それぞれの配列を作成し、その配列に s をentity_id追加します。offer_idクエリのすべての結果を処理すると、必要な構造が得られます。擬似コード:

data = {}
for (entity_id, offer_id in rows) {
    var a = data[entity_id]
    if (a === undefined) {
        a = []
        data[entity_id] = a
    }

    a.push(offer_id)
}
于 2012-06-30T19:01:01.513 に答える
0

では、配列リストの他の列を取得するのはどうですか。次に、各 offer_id を通過する for ループの出口を用意します。次に、内部で各 Entity_id を調べます。複数のエンティティ ID が表示される場合は、その offer_id を最終的な配列リストから削除しないでください。

それとも、SQL 呼び出しでそれを実行しないのはなぜですか?

于 2012-06-30T18:42:44.280 に答える