2010-11-23 6 views
5

Wie wähle ich alle Datensätze sortiert nach created_at desc aus.Rails 3: group =>: Feld sortiert nach created_at desc

Ich möchte vielleicht die neuesten Kommentare für jeden Artikel abrufen. Egal, was ich mache die Gruppe (: article_id), wird immer den ältesten Kommentar zurückgeben.

Mit freundlichen Grüßen. Asbjørn Morell

Antwort

3

Sie werden nicht eine einfache Antwort mit SQL finden - Gruppe vor Art geschieht (seit Gruppe allgemein für aggregierte Daten). Behalten Sie einfach ein latest_comment_id Feld in Ihrem Artikel-Datensatz und fügen Sie dann Kommentare zu "latest_comment_id" hinzu, wenn Sie Ihre Artikel finden.

Wenn Sie mehrere Kommentare pro Artikel wünschen, müssen Sie entweder mehrere Abfragen verwenden oder eine temporäre Tabelle mit den neuesten Kommentaren pro Artikel verwalten.

16

Etwas wie:

Comment.order('created_at DESC').all 

Das sollte es tun :)

Wenn Sie nur das erste Ergebnis möchten, verwenden Sie first statt all. Sie können auch limit verwenden. Exemple erhalten die Premieren 5 Ergebnisse:

Comment.order('created_at DESC').limit(5).all 
+0

Aber wie vermeiden Sie die Auswahl mehrerer Datensätze für jeden Artikel? Ich brauche einen einzelnen Kommentar für jeden Artikel - sortiert nach erstellt bei. – atmorell

+0

Nun, ich bin mir nicht sicher, ob du nur mit Rails-Helfern auskommen kannst. Das sieht ziemlich kompliziert aus! Ich habe einige Nachforschungen zu Google angestellt und festgestellt, dass: http://www.xaprb.com/blog/2006/12/07/how-to-select-the-firstleastmax-row-per-group-in-sql/ . Ist das, was du versuchst zu tun? Was auch immer, bitte posten Sie Ihre Lösung, wenn Sie eine finden;) –

+0

Das ist genau das, was ich versuche zu tun. Will für die Lösung mit einer Latest_comment_id-Spalte in meinem Artikel-Modell gehen. – atmorell

1
Comment.group(:article_id).order('created_at DESC') 
+1

Funktioniert nicht. Die Abfrage wählt alle Kommentare aus, die nach article_id gruppiert sind, aber die Reihenfolge wird nach dem Gruppenteil erfolgen - Sie erhalten den ältesten Kommentar. – atmorell

Verwandte Themen