2

私は次のモデルを持っています

カテゴリ(id、name、is_active)places(id、name、category_id、.....)

ユーザーの好みに基づいて、カテゴリはになります0 or 1。この設定に基づいて、すべての場所にクエリを実行したいと思いますcategories.is_active = 1

2つのアプローチがあると思います

最初のアプローチ

  1. is_active=1であるすべてのカテゴリをクエリして取得します
  2. 上記で取得したカテゴリIDのコレクションからすべての場所のリストを取得します。

2番目のアプローチ

JOINを使用してRawQueryを記述し、条件を設定します。

速度を最適化するためにそれを行うための最良の方法はどれですか?

私は何を試しましたか?

// Get Active Categories
public Cursor getActiveCategories() {
    return db.query(TABLE_CATEGORIES, new String[] { COLUMN_ID,
            COLUMN_NAME, COLUMN_SLUG, COLUMN_ACTIVE }, COLUMN_ACTIVE + "="
            + "'1'", null, null, null, COLUMN_NAME, null);
}


// Get Places
public Cursor getPlaces() {
    return db.query(TABLE_PLACES, new String[] { COLUMN_ID, COLUMN_NAME },
            " type IN ('1','2')", null, null, null, null);
}

上記のコードで、タイプIN ('1','2')を動的に挿入して、最初のメソッドの結果からタイプを入力できるようにする方法は?

4

1 に答える 1

3

ほとんどの場合、単一のrawQueryは、2つの個別のクエリよりも高速です。rawQueryにはパラメータがないため、次のように非常に単純になります。

SELECT places.* 
FROM places 
JOIN categories
  ON places.category_id = categories.id
WHERE categories.is_active = 1
于 2013-01-11T19:29:43.687 に答える