Sólo hizo una pregunta muy similar a éste ...MySQL orderBy un número, cadenas vacías (o de 0) Última
Actualmente estoy haciendo un OrdenarPor muy básico en mi declaración.
SELECT * FROM tablename WHERE visible=1 ORDER BY position ASC, id DESC
El problema con esto es que las entradas de cadena vacía para 'posición' se tratan como 0. Por lo tanto todas las entradas con la posición como cadena vacía aparecen antes que las de 1,2,3,4. por ejemplo:
'', '', '', 1, 2, 3, 4
o
0, 0, 0, 1, 2, 3, 4
¿Hay una forma de lograr el siguiente orden:
1, 2, 3, 4, '', '', ''.
o
1, 2, 3, 4, 0, 0, 0.
Asumo la solución puede tener algún tipo de función de reemplazar pero no he sido capaz de encontrar una función que hace lo que estoy buscando, a través de google.
Muchas gracias,
JonB
Creo que esto funcionará, pero no es la mejor solución. Creo que 'position' debería ser una columna entera, y si ese es el caso, la expresión' CASE' debería usar enteros también, no cadenas. Si 'position' no es un número entero o al menos numérico, la ordenación como números no funcionará de todos modos. Además, esta solución agrega una nueva columna para ordenar, lo que probablemente tendrá un impacto negativo en el rendimiento.Si mi suposición de que 'position' es realmente un entero es correcto, entonces el OP probablemente signifique el valor' NULL' donde escribió 'empty string', lo que significa que simplemente puede escribir 'ORDER BY COALESCE (posición, ~ 0), id DESC' –
@Roland: el OP implicó bastante claramente que la posición es una cadena: * "El problema con esto es que las entradas de cadena vacías para 'posición' se tratan como 0." * – RedFilter
OrbMan sí, lo hizo. Y digo que eso es probablemente parte del problema. Mi sugerencia fue darle un tipo de datos adecuado por adelantado en lugar de tratar de limpiarlo después. –