Ich frage mich, ob es einen Weg gibt (möglicherweise einen besseren Weg), nach der Reihenfolge der Werte in einer IN () -Klausel zu ordnen.
Das Problem ist, dass ich zwei Abfragen habe, eine, die alle IDs erhält, und die zweite, die alle Informationen abruft. Der erste erstellt die Reihenfolge der IDs, nach denen der zweite bestellen soll. Die IDs werden in der richtigen Reihenfolge in eine IN () - Klausel eingefügt.
Es wäre also so etwas wie (extrem vereinfacht):
SELECT id FROM table1 WHERE ... ORDER BY display_order, name
SELECT name, description, ... WHERE id IN ([id's from first])
Das Problem ist, dass die zweite Abfrage die Ergebnisse nicht in derselben Reihenfolge zurückgibt, in der die IDs in die IN () - Klausel eingefügt wurden.
Eine Lösung, die ich gefunden habe, besteht darin, alle IDs in eine temporäre Tabelle mit einem automatisch inkrementierenden Feld einzufügen, das dann in die zweite Abfrage eingefügt wird.
Gibt es eine bessere Option?
Hinweis: Da die erste Abfrage "vom Benutzer" und die zweite in einem Hintergrundprozess ausgeführt wird, gibt es keine Möglichkeit, die 2-in-1-Abfrage mithilfe von Unterabfragen zu kombinieren.
Ich verwende MySQL, aber ich denke, es könnte nützlich sein, zu notieren, welche Optionen es auch für andere DBs gibt.
IN
undFIELD
Parameter gleich sind. Dies in einem Programmcode zu tun, kann durch Verwendung dieses zusätzlichen Wissens schneller sein. Natürlich könnte es klüger sein, diese Belastung eher auf den Client als auf den Server zu übertragen, wenn Sie die Serverleistung im Auge behalten.