2011-01-21 17 views
5

Estoy tratando de obtener los resultados para el tipo de consulta¿Hay una manera de incluir los duplicados de consulta MySQL: select..from..where..id en (lista)

SELECT * FROM table WHERE id IN(2,4,6,1,1,2) ORDER BY field (id,2,4,6,1,1,2) 

y quiero obtener resultados en el mismo orden que la lista que incluye: los duplicados. La consulta anterior conserva el orden pero corta los duplicados. Sé que puedo postprocesar los resultados pero me pregunto si hay una manera más fácil.

Gracias

+1

no entiendo su pregunta. el orden parece sospechoso, y cuando seleccionas desde algún lugar con una cláusula in no debes "cortar" los duplicados; debes obtenerlos todos. – Randy

+0

ordenar por está bien y funciona. Y mysql debería y SÍ suprime dups, pruébelo. – prat

+0

Tampoco estoy claro con el propósito de repetir ID 1 en la cláusula IN. ¿Espera que la consulta devuelva esa fila dos veces? –

Respuesta

3

Esto realmente lograr lo que quiere:

SELECT * FROM table 
inner join (
    select 1 as sort, 2 as value union all 
    select 2, 4 union all 
    select 3, 6 union all 
    select 4, 1 union all 
    select 5, 1 union all 
    select 6, 2) X on X.value=table.id 
ORDER BY X.sort 
0

¿Cómo está haciendo la pregunta? Si usted no está en lugar de hacer un poco de trabajo manual (que más adelante se podría envolver en algún código), los sindicatos deben obtener lo que necesita:

select id from table where id in (1, 2, 4, 6) 
union all 
select id from table where id in (6, 8); 

Devuelve:

------ 
| id | 
|====| 
| 1 | 
| 2 | 
| 4 | 
| 6 | 
| 6 | 
| 8 | 
------ 

EDIT: En realidad, no creo que eso ayude a ordenar. Déjame jugar con esto un poco más.

+0

Es un buen trabajo. Sin embargo, creo que iré con el procesamiento posterior de los resultados. – prat

+0

Tendría que dividir la lista en sub-listas uniq y pasar cada una de las sub-listas al orden por campo (id, sub-list) para cada una de las uniones. (Estoy asumiendo que cada declaración seleccionada en la unión puede tomar el orden) ... pero como dije, voy a dejar MySQL solo en este punto :) – prat

+0

Sí, jugué un poco con eso, pero el orden se vuelve casi imposible. – jerhinesmith

Cuestiones relacionadas