PDA

Visualizza la versione completa : [SQL] Ordine in base alla sequenza in clausola IN


JunkyFunki
20-05-2008, 09:48
Salve,

la seguente interrogazione :


SELECT * FROM tabella where id in (3,6,9,5)


ordina in automatico i risultati visualizzandoli nel seguente ordine :


3
5
6
9


io vorrei che invece visualizzi i risultati nello stesso ordine in cui l'inserisco all'interno delle parentesi tonde , ovvero :


3
6
9
5


come posso fare?

mondobimbi
20-05-2008, 10:19
l'ordine di visualizzazione dei dati interni ad un tabella di un database se non specificato con i costrutti order by etc .. non dipende necessariamente dall'ordine di inserimento dei singoli record o da come hai costruito la select ma a come stato implementato il database e come organizza internamente i singoli record (questo indipendentemente da una eventuale indicizzazione).
Per quello che ne soi io non c' quindi maniera semplice di ottenere quello che desideri.
ciao
sergio

sally3000
20-05-2008, 10:21
potresti spezzare la select in 4 ... unendole insieme
tipo




SELECT * FROM tabella where id=3
union
SELECT * FROM tabella where id=6
union
SELECT * FROM tabella where id=9
union
SELECT * FROM tabella where id=5

MacApp
20-05-2008, 11:57
un'altra soluzione:


select *
from tabella
where id in (3, 6, 9, 5)
order by TAN(id*21)

;-)

JunkyFunki
20-05-2008, 12:08
attualmente la soluzione di sally risolve il mio problema anche se per ricerche in centinaia di record diventa dispendiosa la gestione della query


Originariamente inviato da MacApp
un'altra soluzione:


select *
from tabella
where id in (3, 6, 9, 5)
order by tan (id*21)

;-)

mi d il seguente errore :



FUNCTION tabella.tan does not exist


:master:

MacApp
20-05-2008, 12:24
s ho corretto da "tan (id*21)" in "TAN(id*21)". (la prima forma va bene per postgreSQL, non per MySQL)

JunkyFunki
21-05-2008, 12:19
Originariamente inviato da MacApp
s ho corretto da "tan (id*21)" in "TAN(id*21)". (la prima forma va bene per postgreSQL, non per MySQL)

adesso l'istruzione funziona ma l'ordine casuale :master:

sai dove posso trovare informazioni sulla funzione TAN? sopratutto sul valore che viene moltiplicato per l'ID

123delphi321
21-05-2008, 13:39
ciao... e scusate l'intromissione!

premesso che utilizzo firebird e utilizzo alcune udf generiche.....
tra le varie udf ne ho una che si chiama UDF_POS, tale funzione mi restituisce la posizione in cui una stringa e' presente all'interno di una seconda stringa.

io questo problema lo risolverei cosi:



select
comuni.id,
comuni.item
from comuni
where comuni.id in (3, 6, 9, 5)
order by
udf_pos(' '||comuni.id||',',' 3, 6, 9, 5,')



ciao

JunkyFunki
21-05-2008, 20:19
Originariamente inviato da 123delphi321
ciao... e scusate l'intromissione!

premesso che utilizzo firebird e utilizzo alcune udf generiche.....
tra le varie udf ne ho una che si chiama UDF_POS, tale funzione mi restituisce la posizione in cui una stringa e' presente all'interno di una seconda stringa.

io questo problema lo risolverei cosi:



select
comuni.id,
comuni.item
from comuni
where comuni.id in (3, 6, 9, 5)
order by
udf_pos(' '||comuni.id||',',' 3, 6, 9, 5,')



ciao

provata con mysql query browser mi d il seguente errore :
FUNCTION tabella.udf_pos does not exist
:bh:

123delphi321
21-05-2008, 21:17
certo che non funziona!

c'e' bisogno di una funzione UDF. cosi come usi la funzione TAN devi vedere se esiste una ulteriore funzione che in MySQL possa procedere in maniera analoga a quella da me descritta nel post precedente.

Loading