Newsgroup: it.comp.www.php
Titolo: [MySQL] Ordinare A PIACERE i risultati di una query

Salve,
mi sono incartato in questo problema.
Eseguo una query come la seguente su MySQL (con PHP anche se il
problema è su MySQL):
SELECT * FROM tabella WHERE col_name IN ($valori)
dove , ad esempio, $valori = "123,563,122,652"
fin qui tutto bene, mysql restituisce i record che verificano la
query, però me li ordina:
[col_name]
122...
123...
563...
652...
C'è un modo per ottenere i record con lo stesso ordine con cui sono
stati richiesti i valori?
cioè li vorrei ottenere nello stesso ordine in cui li ho richiesti
nella query:
123..
563..
122..
652..
Mi rendo conto che può sembrare una domanda banale, ma su 
mysql.org
non ho trovato nulla. Grazie a quanti sapranno aiutarmi!! :D


Non saprei come tu possa fare con MySQL.
Se però non trovi soluzione puoi fare la cosa via PHP.
posto che $valori siano gli id:
$query= ("SELECT * FROM tabella WHERE col_name IN ($valori)",$linkDB);
while($RS = mysql_fetch_assoc($query)) $matrice[$RS['id']] = $RS;
poi fai il sort della tua matrice o richiami l'esatto valore che ti 
serve con $matrice['id_che_vuoi']['campo_che_vuoi']
Ciao
Marcello

 Marcello
Sě, ci avevo pensato anche io, ma in questo modo otterrei solamente il
Resource ID del resultset della query. Inoltre nel tuo esempio manca
un passaggio o sbaglio?
non dovrebbe essere:
  $RS = mysql_query($query);
  while( $row = mysql_fetch_assoc($RS))
    {
     $matrice[$RS['id']] = $row; 
    }
Grazie comunque!
H


No non manca un passaggio:
$query= ("SELECT * FROM tabella WHERE col_name IN ($valori)",$linkDB);
while($RS = mysql_fetch_assoc($query)) $matrice[$RS['id']] = $RS;
è uguale a
$RS = mysql_query($query);
while( $row = mysql_fetch_assoc($RS))
{
    $matrice[$RS['id']] = $row;
}
Hai chiamato $row quello che chiamo $RS e $RS quello che chiamo $query
Non ho usato le parentesi perché con una sola istruzione le puoi omettere.
($RS per me sta per "record set", non "resource")
Ciao
Marcello


beh la cosa piu banale che mi viene in mente è che ti conviene fare un array
dei valori ID che vuoi visualizzare:
$ids = array(123,563,122,652);
foreach($ids as $key)
{
  $row = mysql_fetch_row(mysql_query("SELECT * FROM tabella WHERE
col_name='$key'"));
  echo $row[campo_del_db]."<br>";
}
cosi li hai nell'ordine che vuoi
ciao
Michele

 Michele
Sì, più o meno è già impostato così, 
io accodo i valori in una variabile di sessione, e poi li passo a
mysql con una query simile a questa:
 SELECT FROM tabella WHERE id IN ($_SESSION[var])
(dove $SESSION[var] = 123,563,122,652... scusate la ripetizione, ma è
giusto per capirsi meglio)
 
ma siccome prevedo di dovere usare fino a 14 valori , volevo evitare
di imbarcarmi in 14 query ogni volta che viene ricaricata la pagina.
e inoltre questa procedura viene re-iterata fino ad arrivare al 14°
valore; cioè
funziona così:
- si carica la pagina;
- l'utente sceglie un elemento e l'id di questo elemento viene passato
in GET alla stessa pagina e accodato nella var di sessione
- php sottopone la query di prima a mysql ed estrae gli elementi
selezionati dall'utente , però a me serve che siano nello stesso
ordine in cui son stati scelti dall'utente. invece mysql li riordina
seguendo l'ordine degli id nella tabella da cui vengono scelti..
Per ora mi sto arrangiando con due tabelle, inserendo gli id in una
tabella temporanea e facendo una query di estrazione confrontando le
due tabelle, ma speravo che ci fosse un metodo "più nativo"
direttamente dentro mysql :p
Grazie ancora a tutti per il supporto! :D