Abfrageergebnisse in vordefinierter Reihenfolge zurückgeben
In SQL ist es normalerweise schwierig, Abfrageergebnisse in einer bestimmten Reihenfolge abzurufen, sofern diese nicht mithilfe der ORDER angegeben wird BY-Klausel. In einigen Szenarien ist die ORDER BY-Klausel jedoch möglicherweise nicht anwendbar, beispielsweise wenn versucht wird, Daten in einer vorgegebenen Reihenfolge abzurufen, die ausschließlich auf den Werten eines bestimmten Felds basiert.
Eine kürzliche Diskussion brachte ein Szenario zur Sprache, in dem dies der Fall war Sie möchten die IDs (7, 2, 5, 9 und 8) auswählen und in genau dieser Reihenfolge abrufen, ohne sich auf zusätzliche Kriterien zu verlassen. Die folgenden Abfragen geben beide die Ergebnisse in einer unvorhersehbaren Reihenfolge zurück:
SELECT id FROM table WHERE id in (7,2,5,9,8);
SELECT id FROM table WHERE id in (8,2,5,9,7);
Eine neuartige Lösung wurde durch einen Blogeintrag entdeckt, der dieses Problem elegant angeht Problem:
SELECT id FROM table WHERE id in (7,2,5,9,8) ORDER BY FIND_IN_SET(id,"7,2,5,9,8");
Die Funktion FIND_IN_SET wird verwendet, um die Position eines angegebenen Werts innerhalb eines bestimmten Satzes zurückzugeben. Beispielsweise hat ID 7 die Position 1, ID 2 die Position 2 usw.
Bei der Anwendung der ORDER BY-Klausel mit FIND_IN_SET versteht die ORDER BY-Anweisung die Positionen und ordnet die Ergebnisse effektiv basierend auf den angegebenen Werten. Diese Lösung nutzt einen internen Mechanismus in MySQL, um die gewünschte vorgegebene Reihenfolge zu erreichen.
Es ist erwähnenswert, dass diese Technik eine wertvolle Alternative sein kann, wenn die ORDER BY-Klausel nicht verwendet werden kann, um die gewünschte Reihenfolge anzugeben.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3