w3school two columns mysql sql-order-by where-clause

two - MySQL-ORDER BY valores dentro de IN()



order by two columns mysql (6)

Espero ordenar los elementos devueltos en la siguiente consulta por el orden en que se ingresaron en la función IN () .

ENTRADA:

SELECT id, name FROM mytable WHERE name IN (''B'', ''A'', ''D'', ''E'', ''C'');

SALIDA:

| id | name | ^--------^---------^ | 5 | B | | 6 | B | | 1 | D | | 15 | E | | 17 | E | | 9 | C | | 18 | C |

¿Algunas ideas?


Necesita otra columna (numérica) en su tabla, en la que especifique el orden de clasificación. La cláusula IN no funciona de esta manera.

B - 1 A - 2 D - 3 E - 4 C - 5


Otra opción desde aquí: http://dev.mysql.com/doc/refman/5.0/en/sorting-rows.html

select * from tablename order by priority=''High'' DESC, priority=''Medium'' DESC, priority=''Low" DESC;

Entonces, en su caso (no probado) sería

SELECT id, name FROM mytable WHERE name IN (''B'', ''A'', ''D'', ''E'', ''C'') ORDER BY name = ''B'', name = ''A'', name = ''D'', name = ''E'', name = ''C'';

Dependiendo de lo que estés haciendo, he encontrado que es un poco peculiar, pero siempre funcionó después de jugar un poco.


Pruebe algo como

... ORDER BY (CASE NAME WHEN ''B'' THEN 0 WHEN ''A'' THEN 1 WHEN ...


Puede ser que esto pueda ayudar a alguien (p_CustomerId se pasa en SP):

SELECT CompanyAccountId, CompanyName FROM account LEFT JOIN customer where CompanyAccountId = customer.AccountId GROUP BY CompanyAccountId ORDER BY CASE WHEN CompanyAccountId IN (SELECT AccountId FROM customer WHERE customerid= p_CustomerId) THEN 0 ELSE 1 END, CompanyName;

Descripción: Quiero mostrar la lista de cuentas. Aquí estoy pasando una identificación de cliente en sp. Ahora se enumerarán los nombres de las cuentas con cuentas vinculadas a los que los clientes se muestran en la parte superior seguido por otras cuentas en orden alfabético.


Solo usa

order by INSTR( '',B,C,D,A,'' , concat('','' , `field`, '','' ) )

evitar la situación como

INSTR(''1,2,3,11'' ,`field`)

terminará con una fila de resultados desordenada: 1 y 11 alternante


SELECT id, name FROM mytable WHERE name IN (''B'', ''A'', ''D'', ''E'', ''C'') ORDER BY FIELD(name, ''B'', ''A'', ''D'', ''E'', ''C'')

La función FIELD devuelve la posición de la primera cadena en la lista restante de cadenas.

Sin embargo, es mucho mejor para el rendimiento tener una columna indexada que represente su orden de clasificación, y luego ordenar por esta columna.