recomendaciones - mysql tipo personalizado
optimizar querys en mysql (4)
(Habría escrito esto como un comentario sobre la respuesta de Michel Tobon, pero no tengo la reputación, lo siento :-)
"Y funcionó ... ¿por qué? Me supera, pero simplemente lo hizo; inténtalo también".
La razón por la que funciona es porque su expresión "code! = ''USA'' está produciendo un resultado booleano, que en SQL se representa como 1 o 0. Por lo tanto, la expresión" code = ''USA'' produce un 1 por cada registro coincide con ese criterio, y un 0 para cada registro que no lo hace. Dado que 1 es posterior a 0 en una ordenación ascendente (la opción predeterminada), los registros coincidentes se ordenarán más tarde que los no coincidentes. De este modo, se niega la expresión que produce el efecto contrario.
Otra forma (posiblemente más clara) de producir el mismo resultado sería la siguiente:
SELECT * FROM countries ORDER BY code=''USA'' DESC, code=''CAN'' DESC, name ASC
Por supuesto, al responder la pregunta del OP, me gusta más la opción FIELD () - bastante limpia :-)
Tengo una consulta como esta: SELECT * FROM table WHERE id IN (2,4,1,5,3);
Sin embargo, cuando lo imprimo, se ordena automáticamente 1,2,3,4,5. ¿Cómo podemos mantener el orden (2,4,1,5,3) sin cambiar la estructura de la base de datos?
¡Gracias!
El Ordenamiento por campo nunca funcionó para mí. Tenía una lista de países y necesitaba que los Estados Unidos y Canadá aparecieran en la parte superior de la lista, por lo que mi consulta fue así:
SELECT * FROM countries ORDER BY code=''USA'', code=''CAN'', name ASC
Esto nunca funcionó, pero me di cuenta de que el orden era diferente, mostraba a Canadá y los Estados al final de la lista, así que hice esto:
SELECT * FROM countries ORDER BY code!=''USA'', code!=''CAN'', name ASC
Y funcionó ... ¿por qué? Me golpea, pero simplemente lo hizo; Pruébalo también.
pregunto esto:
Las respuestas que recibo y todo el crédito que les pertenece es:
Puede utilizar un operador CASE para especificar el orden:
SELECT * FROM table
WHERE id IN (3,6,1,8,9)
ORDER BY CASE id WHEN 3 THEN 1
WHEN 6 THEN 2
WHEN 1 THEN 3
WHEN 8 THEN 4
WHEN 9 THEN 5
END
En PHP puedes hacerlo como:
<?php
$my_array = array (3,6,1,8,9) ;
$sql = ''SELECT * FROM table WHERE id IN (3,6,1,8,9)'';
$sql .= "/nORDER BY CASE id/n";
foreach($my_array as $k => $v){
$sql .= ''WHEN '' . $v . '' THEN '' . $k . "/n";
}
$sql .= ''END '';
echo $sql;
?>
SELECT * FROM table WHERE id IN (2,4,1,5,3) ORDER BY FIELD(id,2,4,1,5,3);
Fuente: http://imthi.com/blog/programming/mysql-order-by-field-custom-field-sorting.php