Tengo un array de PHP con los números de IDENTIFICACIÓN en él. Estos números ya están ordenados.

Ahora me gustaría obtener mi resultado a través de las EN() método, para obtener todos los ID.

Sin embargo, estas ID debe ser ordenado como en el método.

Por ejemplo:

IN(4,7,3,8,9)  

Debe dar un resultado como:

4 - Article 4  
7 - Article 7  
3 - Article 3  
8 - Article 8  
9 - Article 9

Alguna sugerencia? Tal vez hay una función para hacer esto?

Gracias!

  • ¿Cuáles son los otros datos asociados con los números? Nos podría dar una pista de por qué usted quiere que, en ese orden.

4 Comentarios

  1. 138

    Creo que puede estar buscando función CAMPO -, mientras que normalmente se piensa como una función de cadena, funciona muy bien para los números, también!

    ORDER BY FIELD(field_name, 3,2,5,7,8,1)
    • Exactamente. Acabo de mirar en Paul Dubois de MySQL libro de cocina y se encontró que: SELECT id, nombre FROM artículos where id IN(7,4,21) ORDEN POR el CAMPO(id, 7,4,21) Gracias!
    • Por supuesto que las personas son rápidas. 😉
    • feliz de haber ayudado a usted, pero una aceptación w/o un upvote es un muy peculiar aparición en TAN — cualquier razón usted no upvote mí?-)
    • Eso es muy inteligente. Yo no habría pensado en poner el CAMPO en cualquier lugar después de la cláusula where, por miedo a que le iba a tirar un error de sintaxis o que la base de datos podría confundirse en el que el ‘id’ para su uso. Pero tiene sentido, después de mi cerebro municiones.
    • encantados de haber ampliado su cerebro-a pesar de que sólo hace que sea más profundo y más oscuro misterio para mí, en cuanto a por qué nadie upvoting esto!-) Peculiar de hecho…:-).
    • Ahora, esta es una primera solución de clase +1

  2. 8

    Usted podría utilizar CAMPO():

    ORDER BY FIELD(id, 3,2,5,7,8,1)

    Devuelve el índice (posición) de str en el str1, str2, str3, … lista. Devuelve 0 si str no se encuentra.

    Es una especie de feo hack, así que realmente sólo lo uso si usted no tiene ninguna otra opción. Ordenar el resultado de la aplicación pueden ser mejor.

  3. 0

    SQL estándar no proporciona una forma de hacer esto (MySQL puede, pero yo prefiero las soluciones que son proveedores independientes de modo que puede cambiar DBMS’ en cualquier momento).

    Esto es algo que usted debe hacer en el post-procesado después de el conjunto de resultados devueltos. SQL sólo puede devolver en un orden especificado en la cláusula «order by» (o en cualquier orden si no hay ninguna cláusula de ese tipo).

    La otra posibilidad (aunque no me gusta, estoy obligados a dar la opción) es de hacer varios viajes a la base de datos, uno para cada ID, y el proceso de como vienen, en:

    select * from tbl where article_id = 4;
    //Process those.
    select * from tbl where article_id = 7;
    //Process those.
    : : : : :
    select * from tbl where article_id = 9;
    //Process those.
    • Usted puede hacerlo en SQL estándar utilizando CASE col WHEN *1st-val* THEN 1 WHEN *2nd-val* THEN 2 ... END
    • … no es que me gustaría recomendar tal cosa!
  4. -3

    Usted sólo tendrá que dar la orden correcto declaración.

    SELECT ID FROM myTable WHERE ID IN(1,2,3,4) ORDER BY ID

    ¿Por qué usted desea conseguir sus datos ordenados desordenada como en tu ejemplo?

    Si no te importa concatening consultas largas, trate de esa manera:

    SELECT ID FROM myTable WHERE ID=1
    UNION
    SELECT ID FROM myTable WHERE ID=3
    UNION
    SELECT ID FROM myTable WHERE ID=2
    • Gracias. Pero esto no va a hacer el truco: SELECT id, nombre FROM artículos where id IN(7,4,21) ORDER BY id Debe mostrar 7,4,21. Pero en su lugar se mostrará: 4,7,21…
    • La unión hace la no garantizar el orden.
    • Derecho, por lo tanto mi segundo tiro, le dará la quería ‘orden’, pero no es la cosa más dulce.
    • Creo que no entendieron bien mi comentario, @BeowulfOF. No hay nada en las especificaciones de SQL que dice que el id=1 filas serán devueltos antes de que el id=2 unidades. La UNIÓN de sindicatos de la selecciona, no controla el orden en que vienen.
    • No del todo, Pax, mi respuesta era para Henks comentario. No importa, yo no lo escribió de forma explícita.

Dejar respuesta

Please enter your comment!
Please enter your name here