2009-06-16 21 views
1

Total noob Frage. Würde mich sehr über Hinweise freuen.Wie kann man Ergebnisse nach Wert aus einer der beiden Spalten sortieren? (Welche davon hängt davon ab) (Schienen)

Ich habe ein Schienenmodell, das 2 mögliche Werte für ein Konzept enthält, z. B. Abstand (ein Wert aus einer GPS-Datei und ein bearbeiteter Wert). Es ist möglich, einen Wert in jeder Spalte haben (nur Datei oder nur manuell), beide (manuell überschreibt Datei in diesem Fall) oder keines von beiden:

distance-file  distance-edited 
9 
10    11 
        12 

An mehreren Stellen in meiner app, ich mag einen Fund tun und sortiere die Ergebnisse nach Entfernung, wobei Datei und bearbeitetes Material nur darin liegt, dass ich die Entfernungsbearbeitung verwenden möchte, wenn sie vorhanden ist.

Da ich diese Art an vielen Orten mache, würde ich am liebsten die Logik für die Auswahl des Entfernungswerts zentralisieren, um irgendwo zu verwenden, sodass ich in jedem Fund einfach die Entfernung sortieren kann.

Was ist der richtige Weg?

Vielen Dank!

Olivia

Antwort

0

Ich denke, dass Sie in der Lage sein sollte, einfach :order => 'distance-edited, distance-file' als Bedingung passieren zu Ihrem find.

+0

Dadurch werden die Einträge bestellen, ohne Abstand bearbeitet, nachdem alle mit abstands bearbeitet, die –

+0

OK falsch, ich didn‘ Ich habe die Chance, es auszuprobieren. –

+0

Ich hätte erwähnen sollen, dass ich das versucht habe und, wie Tor vorgeschlagen hat, die Ergebnisse nicht für eine genaue Sortierung vermischt hat. –

1

Also nur um neu zu formulieren, möchten Sie Entfernung-editierte als primäre Maßnahme, wenn es vorhanden ist, und Distanz-Datei, wenn es nicht ist? Sie werden so etwas wie benötigen:

ORDER BY COALESCE(distance-edited, distance-file) 

Coalesce bedeutet „den ersten Wert in dieser Liste verwenden, die nicht NULL ist“, und ist eine MS SQL-spezifische Funktion. Für andere Datenbanken müssen Sie die entsprechende von diesem System unterstützte Anweisung verwenden.

Was ist, wenn beide NULL sind? Willst du es am Ende der Liste oder am Anfang? Sie könnten uns ein „default“ Wert, der durch einen dritten Wert in der coalesce Liste hinzugefügt:

ORDER BY COALESCE(distance-edited, distance-file, 100) 
+0

Ahh, interessant. Ich hatte ein wenig über das Löschen von SQL-Funktionen in Rails gelesen, wusste aber nichts über Koaleszenz. Werde es ausprobieren. Vielen Dank! –

Verwandte Themen