¿Es posible ordenar en mysql por "ordenar por" usando un conjunto predefinido de valores de columna (ID) como: ordenar por (ID = 1,5,4,3) para obtener el registro 1, 5, 4, 3 en ese ¿ordenar?
ACTUALIZACIÓN: Sobre el abuso de mysql ;-) Tengo que explicar por qué necesito esto ...
Quiero que mis registros cambien de orden aleatoriamente cada 5 minutos. Tengo una tarea cron para hacer la tabla de actualización para poner un orden de clasificación diferente y aleatorio en ella. ¡Solo hay un problema! PAGINACIÓN. Tendré un visitante que venga a mi página y le doy los primeros 20 resultados. Esperará 6 minutos y pasará a la página 2 y obtendrá resultados incorrectos ya que el orden de clasificación ya había cambiado.
Así que pensé que si él llegaba a mi sitio, ponía todos los ID en una sesión y cuando él estaba en la página 2, sacaba los registros correctos incluso si la clasificación ya había cambiado.
¿Hay alguna otra forma mejor de hacer esto?
Respuestas:
Puede utilizar la función ORDER BY y FIELD. Ver http://lists.mysql.com/mysql/209784
Utiliza la función Field () , que "Devuelve el índice (posición) de str en la lista str1, str2, str3, .... Devuelve 0 si no se encuentra str" según la documentación. Entonces, en realidad, ordena el conjunto de resultados por el valor de retorno de esta función, que es el índice del valor del campo en el conjunto dado.
fuente
Debería poder usar
CASE
para esto:fuente
En la documentación oficial de mysql sobre ORDER BY , alguien ha publicado que puede usar
FIELD
para este asunto, así:Este es un código no probado que, en teoría, debería funcionar.
fuente
Si tuviera 10 registros, por ejemplo, de esta manera aparecerán primero los ID 1, 5, 4 y 3, los demás registros aparecerán a continuación.
Exposición normal 1 2 3 4 5 6 7 8 9 10
De esta manera
8 5 4 3 1 2 6 7 9 10
fuente
Hay otra forma de solucionar esto. Agregue una tabla separada, algo como esto:
Esta tabla ahora se utilizará para definir su propio mecanismo de pedido.
Agregue sus valores allí:
... y luego modifique su declaración SQL mientras se une a esta nueva tabla.
Esta solución es un poco más compleja que otras soluciones, pero al usarla, no tiene que cambiar su
SELECT
declaración cada vez que cambian los criterios de su pedido, simplemente cambie los datos en la tabla de pedidos.fuente
fuente
ASC OR DESC
sea la sintaxis adecuadaSi necesita solicitar una única identificación primero en el resultado, use la identificación.
Si necesita comenzar con una secuencia de múltiples identificadores, especifique una colección, similar a la que usaría con una
IN
declaración.fuente
Si desea ordenar una única identificación al final del resultado, use el orden por caso. (Por ejemplo: desea la opción "otra" en último lugar y la lista de todas las ciudades se muestra en orden alfabético).
Si tuviera 5 ciudades, por ejemplo, quiero mostrar la ciudad en orden alfabético con la opción "otra" mostrar la última en el menú desplegable, entonces podemos usar esta consulta. vea el ejemplo, otros se muestran en mi tabla en la segunda identificación (identificación: 2), así que estoy usando "cuando identificación = 2" en la consulta anterior.
registro en la tabla DB:
mi salida:
fuente