Devolver los resultados de la consulta en un orden predefinido
En SQL, normalmente resulta complicado recuperar los resultados de la consulta en un orden concreto, a menos que se especifique mediante el comando ORDER Cláusula POR. Sin embargo, en algunos escenarios, la cláusula ORDER BY puede no ser aplicable, como cuando se intenta recuperar datos en un orden predeterminado basándose únicamente en los valores de un campo específico.
Una discusión reciente planteó un escenario en el que era desea seleccionar ID (7, 2, 5, 9 y 8) y recuperarlos en ese orden exacto sin depender de ningún criterio adicional. Las siguientes consultas devuelven los resultados en un orden impredecible:
SELECT id FROM table WHERE id in (8,2,5,9,7);
SELECT id FROM table WHERE id in (8,2,5,9,7);
SELECT id FROM table WHERE id in (8,2,5,9,7);
SELECT id FROM table WHERE id in (7,2,5,9,8) ORDER BY FIND_IN_SET(id,"7,2,5,9,8");
SELECT id FROM table WHERE id in (7,2 ,5,9,8) ORDER BY FIND_IN_SET(id,"7,2,5,9,8");
La función FIND_IN_SET se utiliza para devolver la posición de un valor específico dentro de un conjunto determinado. Por ejemplo, el id 7 tiene una posición de 1, el id 2 tiene una posición de 2, y así sucesivamente.
Al aplicar la cláusula ORDER BY con FIND_IN_SET, la declaración ORDER BY comprende las posiciones y ordena efectivamente los resultados. basándose en los valores especificados. Esta solución aprovecha un mecanismo interno en MySQL para lograr el orden predeterminado deseado.
Vale la pena señalar que esta técnica puede ser una alternativa valiosa cuando la cláusula ORDER BY no se puede emplear para especificar el orden deseado.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3