Domanda

Ho un array PHP con un numero di identificazione è in esso. Questi numeri sono già ordinati.

Ora vorrei avere il mio risultato tramite il metodo IN (), per ottenere tutti di. Dell'ID

Tuttavia, queste identificazioni devono essere ordinati come nel metodo IN.

Ad esempio:

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

Dovrebbe dare un risultato simile:

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

Qualche suggerimento? Forse c'è una funzione per fare questo?

Grazie!

È stato utile?

Soluzione

Credo che potrebbe essere alla ricerca per la funzione CAMPO - mentre normalmente pensato come una funzione di stringa, tutto funziona bene per i numeri, anche

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

Altri suggerimenti

Si potrebbe utilizzare FIELD() :

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

restituisce l'indice (posizione) di str in str1, str2, str3, ... lista. Restituisce 0 se str non viene trovato.

E 'una specie di un brutto hack, però, così davvero usare solo se non avete altra scelta. Ordinamento l'uscita nella vostra applicazione può essere migliore.

standard SQL non fornisce un modo per fare questo (MySQL può, ma io preferisco soluzioni vendor-neutral, così posso cambiare DBMS' in qualsiasi momento).

Questa è una cosa che si dovrebbe fare in post-processing dopo il set di risultati viene restituito. SQL li può restituire solo in un ordine specificato nella "ordina" clausola (o in qualsiasi ordine se non c'è tale clausola).

L'altra possibilità (anche se non mi piace, io sono l'onore-bound per dare la scelta) è quello di rendere più viaggi al database, uno per ogni ID, ed elaborarli come vengono in:

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.

Avrete solo bisogno di dare l'ordine corretto dalla dichiarazione.

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

Perché si vuole per ottenere i dati ordinati non ordinata, come nel tuo esempio?

Se non ti dispiace concatening query lunghe, provare in questo modo:

SELECT ID FROM myTable WHERE ID=1
UNION
SELECT ID FROM myTable WHERE ID=3
UNION
SELECT ID FROM myTable WHERE ID=2
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top