5

このクエリをレールで使用しています

ここに: @album_ids@country_ids配列です

@audios= Audio.where({:album_id => @album_ids, :country_id => @country_ids})
It produces following SQL:

 Audio Load (0.3ms)  SELECT `audios`.* FROM `audios` WHERE `audios`.`album_id` IN (1, 2) AND `audios`.`country_id` IN (1, 2)

しかし、クエリを次のように作成したい:

 Audio Load (0.3ms)  SELECT `audios`.* FROM `audios` WHERE `audios`.`album_id` IN (1, 2) OR `audios`.`country_id` IN (1, 2) 

ORそれよりもAND

前もって感謝します

4

3 に答える 3

7

Rails 3(ARELを使用)の場合、

at = Audio.arel_table
audios = Audio.where(at[:album_id].in(@album_ids).or(at[:country_id].in(@country_ids)))

# Audio Load (0.3ms)  SELECT `audios`.* FROM `audios` WHERE ((`audios`.`album_id` IN (1, 2) OR `audios`.`country_id` IN (1, 2)))
于 2012-08-16T07:49:25.507 に答える
0

Where 句は常に AND を作成するか、2 行に変更します。

@audios  = Audio.where({:album_id => @album_ids})
@audios += Audio.where({:country_id => @country_ids})

rails3 は検索をインラインで呼び出すのではなく、クエリをコンパイルするので、1 つのクエリとして実行する必要があります。

また:

@audios= Audio.where(["album_id IN (?) OR country_id IN (?)", @album_ids, @country_ids])
于 2012-08-16T07:39:04.193 に答える
0

この方法を試してください

a = Report.scoped
a.where(
  a.table[:id].in([1,2,3])
    .or( 
      a.table[:model_id].in([3,4,5])
    )
  ).to_sql
=> "SELECT `reports`.* FROM `reports`  WHERE ((`reports`.`id` IN (1, 2, 3) OR `reports`.`model_id` IN (3, 4, 5)))" 
于 2012-08-16T07:43:44.900 に答える