外部結合したテーブルをGROUPしてから関連テーブルのカラムでソートしたい
以下の関係の4つのテーブルがあります。
報告には1人のユーザー
ユーザーは複数の部署に所属しています。
#報告 class DailyReport belongs_to :user #ユーザー class User has_many :daily_reports #中間テーブル class DepartmentsUser belongs_to :department belongs_to :user #部署 class Department has_many :users
やりたいこと
現在、報告を「報告に紐づくユーザーが所属する部署の名前」で並びかえしようと思っています。
ただし、ユーザーが所属する部署が複数の場合は(※部署の優先度が一番高いもの)でソートしたい。
※部署の優先度については、優先度順に部署のIDが取得できています。
試したこと
# 部署のIDを優先度に配列で取得 sorted_department_ids = Department.departments_sort.ids #ソート条件を作成 sanitized_query = ActiveRecord::Base.send(:sanitize_sql_array, ["field(departments.id ,?)",sorted_department_ids]) daily_reports = DailyReport.all #各テーブルを外部結合したものを部署の優先度順に並び替え、uniqで重複を取り除いている。 daily_reports.uniq("daily_reports.id").from(daily_reports.joins("LEFT OUTER JOIN `users` ON `users`.`id` = `daily_reports`.`user_id` LEFT OUTER JOIN `departments_users` ON `departments_users`.`user_id` = `users`.`id` LEFT OUTER JOIN `departments` ON `departments`.`id` = `departments_users`.`department_id`").order(sanitized_query).select("*")).select("*") #部署名でソート daily_reports = daily_reports.order("departments.name DESC")
エラーメッセージ
4行目において以下のエラーメッセージが出力されていました。 Mysql2::Error: Duplicate column name 'id': SELECT DISTINCT * FROM (SELECT * FROM `daily_reports` LEFT OUTER JOIN `users` ON `users`.`id` = `daily_reports`.`user_id` LEFT OUTER JOIN `departments_users` ON `departments_users`.`user_id` = `users`.`id` LEFT OUTER JOIN `departments` ON `departments`.`id` = `departments_users`.`department_id`ORDER BY field(departments.id ,26,27,29,25,32,33,28,34,35,36,37,38)) subquery
ご教示お願い致します。
回答3件
あなたの回答
tips
プレビュー