كيف يمكنني العثور على () جميع السجلات فريدة في بعض المجالات؟

StackOverflow https://stackoverflow.com/questions/651181

سؤال

ولدي قائمة الكائنات "طلب"، كل منها له صفاته أكتيفيريكورد طبيعية إلى حد ما. يرتبط الجدول الطلبات إلى ألعاب الطاولة مع انضمام الجدول، "games_requests،" بحيث طلب لديها مجموعة request.games.

والسؤال هو، هل هناك طريقة للقيام تجد لطلبات مشاركة ن فريدة من نوعها، حيث يتم تعريف تفرد حسب العمود ألعاب واثنين آخرين، ولكن يتجاهل تحديدا colums الأخرى (مثل اسم المستخدم الذي يطلب؟)

ورأيت جملة مثل "العثور على (: قبل كل شيء،: الحد => 5،: وتشمل => [: ألعاب،: مرحلة]). ولكن هذا كان عائدا التكرارات

وشكرا ...

وتحرير: بفضل الفوضى للاستجابة كبيرة. حصلت لي حقا قريبة، ولكن ما زلت بحاجة للعودة أن تكون صالحة الأجسام الطلب: 5 السجلات الأولى التي تختلف في الصفوف المطلوبة. أنا فقط يمكن استخدام هذا الاكتشاف على النحو الذي شيدت عليه ثم القيام الاكتشاف الثاني للصف الأول في الجدول الذي يطابق كل من مجموعات إرجاعها بواسطة الاكتشاف الأول.

وتحرير:

Games.find(
    :all, :limit => 5,
    :include => [:games, :requests],
    :group => 'games, whatever, whatever_else'
)

... يعطي خطأ SQL:

Mysql::Error: Unknown column 'games' in 'group statement': SELECT * FROM `games`  GROUP BY games

ولقد تقدمت بعض التغييرات على ما افترضت أن يكون صحيحا لمشروعي. الحصول على قائمة من الطلبات بدلا من الألعاب وغيرها:

Request.find(
    :all, :order=>"id DESC", :limit=>5,
    :include=>[:games],   #including requests here generates an sql error
    :group=>'games, etc'  #mysql error:  games isn't an attribute of requests
    :conditions=>'etc'
)

وأنا أفكر أنا ذاهب لديك لاستخدام: انضمام => الخيار هنا

هل كانت مفيدة؟

المحلول

Games.find(
    :all, :limit => 5,
    :include => [:games, :requests],
    :group => 'games, whatever, whatever_else'
)

نصائح أخرى

وحاول القضبان يعمل uniq_by.It أيضا مع الجمعيات وعوائد مجموعة.

و@document = Model.uniq_by(&:field)

المزيد <لأ href = "http://www.brownwebdesign.com/blog/2012/12/rails-uniq_by-unique-results-from-activerecord-relations/" يختلط = "نوفولو" عنوان = "دليل uniq_by "> التفاصيل

وأعتقد أنك سوف تكون قادرة على القيام بذلك find_by_sql باستخدام وGROUP BY:

Games.find_by_sql("SELECT * FROM games GROUP BY user_id")
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top