2015-09-06 18 views
2

我在我的rails應用程序中有一個相當複雜的查詢, 我加入表A和表B,因此我可以徹底搜索這兩個表 然後,我將表A組合在一起以刪除創建的重複項通過我的內部加入表B 然後我需要剩餘記錄的計數,以便可以對結果進行分頁。在加入和分組查詢中獲取總行

但是這樣做是給我下面的異常,當我試圖讓數:

ActiveRecord::StatementInvalid (PG::AmbiguousColumn: ERROR: column reference "game_id" is ambiguous 
LINE 1: SELECT COUNT(*) AS count_all, game_id AS game_id, region AS ... 
            ^
: SELECT COUNT(*) AS count_all, game_id AS game_id, region AS region FROM "game_data" INNER JOIN "player_participants" ON "player_participants"."game_id" = "game_data"."game_id" WHERE "player_participants"."region" = $1 AND "game_data"."region" = 'NA1' AND "game_data"."status" = 1 GROUP BY "game_data"."game_id", "game_data"."region"): 

這裏是我的Rails代碼:

games = GameDatum.joins(:player_participants).where(
    player_participants: pp_data, 
    game_data: g_data 
).group(:game_id).order(created_at: :desc).page(page).per(records) 

games_json = {} 
games_json[:pages] = games.total_pages 

games.total_pages使用.count,它是什麼給我的問題。

感謝您的幫助!

回答

3
ERROR: column reference "game_id" is ambiguous 

看起來您在兩張表格中都有game_id列。因此,在查詢中使用table_name.column_name慣例。如果你想使用game_idplayer_participants表使用.group('player_participants.game_id'),而不是group(:game_id)

games = GameDatum 
    .joins(:player_participants) 
    .where(player_participants: pp_data, game_data: g_data) 
    .group('player_participants.game_id') 
    .order(created_at: :desc) 
    .page(page) 
    .per(records) 
+1

謝謝你修好了! –

+0

太棒了,很高興它爲你工作:) –

0

從純SQL的答案,這個問題是,game_id出現在兩個表中,所以你需要具體的查詢使用哪一個,如:

SELECT COUNT(*) AS count_all, "player_participants".game_id AS game_id, region AS region FROM "game_data" INNER JOIN "player_participants" ON "player_participants"."game_id" = "game_data"."game_id" WHERE "player_participants"."region" = $1 AND "game_data"."region" = 'NA1' AND "game_data"."status" = 1 GROUP BY "game_data"."game_id", "game_data"."region" 

因此,我建議你嘗試通過諸如添加table.column_name到組:

。集團(「player_participants.game_id」)

對不起,我無法提供更多幫助。