dedlfix: MySQL 5.1: manuelle Sortierung bei SELECT / IN

Beitrag lesen

Hi!

Ja. Es gibt Fallunterscheidungsfunktionen (IF() und CASE), mit denen du entweder eine berechnete Spalte in die Ergebnismenge bringen und nach der du sortieren lassen kannst. Du kannst das auch in der ORDER-BY-Klausel notieren.

Hilft mir das in diesem Kontext weiter - sprich kann ich nach 1,3,2,4 sortieren, ohne eine wirklich vorhandene Spalte in einer Tabelle zu haben?

Ich sagte "berechnete Spalte", sowas wie: SELECT foo, foo + 2 FROM ...

Da das DBMS ja anhand der Selektionskriterien eine eindeutige Auswahl treffen kann, kannst du auch diese Selektionskriterien so in das CASE-Konstrukt einbauen, dass eindeutig sortierbare Werte den jeweiligen Datensätzen zugeordnet werden können. (IF() hab ich grad nicht mehr erwähnt, weil ein CASE vielleicht mehr Schreibaufwand bedeutet, aber verschachtelte IF() schlechter wartbar sind.)

Die Alternative die mir spontan eingefallen wäre ist schlichtweg Union zu verwenden und anstatt mit IN mit = zu arbeiten.
Die manuelle Auswahl und Reihung der Datensätze in meinem Fall übersteigt niemals 5 und wird im Regelfall 2 belaufen

Wie auch immer, du wirst ein Stück Code brauchen, das dir die Abfrage passend zusammenbaut. Das muss sowohl die unterschiedlichen Anzahl der IN()-Werte berücksichtigen, als auch das daraus resultierende unterschiedlich lange CASE-Konstrukt, oder aber alternativ die UNION-Abfragen.

UNION würde ich nicht nehmen, zuviele Wiederholungen. Die werden zwar sichererlich automatisch erzeugt was keine Copy&Paste-Probleme bereiten wird, aber schön ist was anderes.

Lo!