tablas recomendaciones querys porque optimizar optimizacion lento las daƱan cuello conexiones botella mysql sorting

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:

mysql orden por tema

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; ?>