4 Stimmen

Alle Spalten nach einem eindeutigen Spaltenwert in Rails 3 auswählen

In Rails 3, wie wähle ich Zeilen basierend auf eindeutige Spaltenwerte, muss ich alle Spalten für z. B. erhalten:

SELECT COUNT(DISTINCT date) FROM records

Dies gibt nur Datum Spalte, aber ich möchte alle Spalten (Name, Datum, Alter, created_at) Spalten nicht nur das Datum.

Vielen Dank für Ihre Hilfe

7voto

Troy Punkte 5179

Das Problem dabei ist, dass es per Definition mehrere Datensätze mit demselben Datum geben kann. Es erfordert eine Logik im Benutzerbereich, um zu bestimmen, welcher der mehreren Datensätze mit dem eindeutigen Datum verwendet werden soll. Hier ist etwas Code, um diese Zeilen zu erhalten:

Record.select("distinct date").each do |record|
    records = Record.find_by_date record.date
    puts records.count # do something with the records
end

Wenn es Ihnen wirklich um die Eindeutigkeit zwischen mehreren Spalten geht, führen Sie alle relevanten Spalten in der eindeutigen Abfrage auf:

Record.select("distinct date, name, age, created_at").each do |record|
    puts record.date
    puts record.name
    puts record.age
    puts record.created_at
    # ``record'' still represents multiple possible records
end

Die Tatsache, dass Sie distinct verwenden, bedeutet, dass jede zurückgegebene "Zeile" tatsächlich für n Zeilen, so dass die DB nicht weiß, welche der n Zeilen, aus denen die restlichen Spalten gezogen werden. Aus diesem Grund werden nur die in distinct verwendeten Spalten zurückgegeben. Es kann nichts anderes tun...

5voto

urjit on rails Punkte 1528

Ich denke, das wird Ihnen helfen

Model.find(:all, :select => 'DISTINCT name, date, age, created_at')

Bitte verwenden Sie es und lassen Sie es mich wissen.

4voto

Hugo Punkte 2009
Model.group(:column)

Für Ihren Fall:

Record.group(:date)

So erhalten Sie alle Ihre Spalten ohne "Datum"-Wiederholungen.

1voto

Abhaya Punkte 2046

Für Schienen 3.2 und höher, Model.select('DISTINCT name, date, age, created_at')

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X