include指定時にdistinctを使う(検証中)
AR::findを使う時にdistinctを使うことはあったんだけど、includeオプションを一緒に使ったことが無かった。
使ってみるとうまく使えないという話なのでテストしてみた
game = Game.find(:all,:select=>"distinct name") => SELECT distinct name FROM games
ふーむ、単純にセットしてみるとsql文にdistinctが挿入されているな。これなら問題ないのか。
game = Game.find(:all,:select=>"distinct name",:include=>"majorsites") => SELECT games."id" AS t0_r0, games."name" AS t0_r1, games."j_name" AS t0_r2, games."search_word" AS t0_r3, games."year" AS t0_r4, games."valid" AS t0_r5, games."created_at" AS t0_r6, games."updated_at" AS t0_r7, majorsites."id" AS t1_r0, majorsites."name" AS t1_r1, majorsites."url" AS t1_r2 FROM games LEFT OUTER JOIN game2sites ON (games."id" = game2sites."game_id") LEFT OUTER JOIN majorsites ON (majorsites."id" = game2sites."majorsite_id")
なるほど。:selectが無視されるような動きになるのか。
これの場合は、特に中間テーブルを中継してデータを取りに行かせているのでそうなるのかな。
- includeの代わりに
- joinsを使うと:selectで指定した部分は動くらしい。こっちを検証してみるかな。