2011-01-21 2 views
5

Sto cercando di ottenere i risultati per il tipo di queryC'è un modo per includere i duplicati di query MySQL: select..from..where..id in (lista)

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

e voglio ottenere risultati nello stesso ordine della lista inclusi: i duplicati. La query sopra conserva l'ordine ma elimina i duplicati. So di poter post-elaborare i risultati, ma mi chiedo solo se c'è un modo più semplice.

Grazie

+1

non capisco la tua domanda. l'ordine sembra sospetto e quando selezioni da qualche parte con una clausola in non devi "ritagliare" i duplicati - dovresti prenderli tutti. – Randy

+0

per ordine va bene e funziona. E mysql dovrebbe e ritaglia i duplicati - provalo. – prat

+0

Non sono nemmeno chiaro allo scopo di ripetere l'ID 1 nella clausola IN. Ti aspetti che la query restituisca la riga due volte? –

risposta

3

Questo effettivamente ottenere quello che vuoi:

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

Come stai creando la query? Se non sei contrario a fare un po 'di lavoro manuale (che si potrebbe poi avvolgere in un codice), i sindacati dovrebbero ottenere quello che ti serve:

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

Returns:

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

EDIT: In realtà, non penso che questo aiuti il ​​tuo ordine, comunque. Lasciami giocare ancora con questo.

+0

È un bel lavoro, ma penso che andrò con i risultati post-elaborazione. – prat

+0

È necessario suddividere l'elenco in sotto-elenchi uniq e passare ciascuno degli elenchi secondari all'ordine per campo (id, sotto-elenco) per ciascun sindacato. (Suppongo che ogni dichiarazione selezionata nel sindacato possa prendere ordine da) .. ma come ho detto, lascerò MySQL da solo a questo punto :) – prat

+0

Sì, ci ho giocato un po ', ma l'ordine diventa quasi impossibile. – jerhinesmith