View Full Version : Query MYSQL
Ho uno programma in PHP che esegue questa query in MYSQL 5 :
"SELECT ID FROM tabella1 WHERE Stato !=0 ORDER BY Voto DESC LIMIT 0, 15"
metto tutti gli ID (mettiamo 20) ottenuti in un array chiamato $id; poi eseguo un for (indice $a, max 20) per ogni elemento dell'array eseguendo:
$query = "SELECT * FROM tabella2 WHERE ID = $id[$a] ORDER BY campo DESC LIMIT 0, 1";
ottengo tutti e soli gli elementi che mi servono. MI CHIEDEVO:
E' possibile (tramite subquery, join, ....) unire le query nel FOR in modo da non farne 20 separate ma una unica?
grazie
trallallero
05-06-2007, 15:54
Ho uno programma in PHP che esegue questa query in MYSQL 5 :
"SELECT ID FROM tabella1 WHERE Stato !=0 ORDER BY Voto DESC LIMIT 0, 15"
metto tutti gli ID (mettiamo 20) ottenuti in un array chiamato $id; poi eseguo un for (indice $a, max 20) per ogni elemento dell'array eseguendo:
$query = "SELECT * FROM tabella2 WHERE ID = $id[$a] ORDER BY campo DESC LIMIT 0, 1";
ottengo tutti e soli gli elementi che mi servono. MI CHIEDEVO:
E' possibile (tramite subquery, join, ....) unire le query nel FOR in modo da non farne 20 separate ma una unica?
grazie
non conosco il PHP ma la select sarebbe
"SELECT * FROM tabella2 WHERE ID IN ($id[1], $id[2], ..., $id[n], )
se riesci a creare la query in questo modo e´ fatta ;)
Io te la posso fare in bash, C .. ma in PHP no
non conosco il PHP ma la select sarebbe
"SELECT * FROM tabella2 WHERE ID IN ($id[1], $id[2], ..., $id[n], )
se riesci a creare la query in questo modo e´ fatta ;)
Io te la posso fare in bash, C .. ma in PHP no
C'è un problema: la prima query mi da gli ID in ordine decrescente di voto (OK).
La seconda serve per prendere (PER IL SINGOLO ID) la prima fra quelle aventi ID=x e ordinati per campo (alla fine di tutto, con un array da 15 ID ottengo 15 righe). Mentre la tua query me ne resitituisce troppe (o solo una con limit 0,1). Il problema è questo: ID, in tabella2, non è unico !
grazie
Dipende, se la coppia di valori (id, campo) è univoca in tabella2 è possibile costruire una subquery che determina le coppie di interesse, qualcosa di simile aselect
tabella2.*
from
(select
mytable1.id,
max(mytable2.campo)
from (select
id
from
tabella1
where
stato <> 0
order by
voto desc limit 0,15
)table1,
(select
id,
campo
from
tabella2
)mytable2
where
mytable1.id=mytable2.id
group by
mytable1.id
)mytable3,
tabella2
where
mytable3.id=tabella2.id and
mytable3.campo=tabella2.campo L'esempio è comunque inutile se esistono più record in tabella2 con gli stessi valori di id e campo.
In ogni caso se non riesci ad identificare in modo univoco il singolo record in tabella2 devi per forza esaminare il set dei risultati al di fuori del DBMS.
Dipende, se la coppia di valori (id, campo) è univoca in tabella2 è possibile costruire una subquery che determina le coppie di interesse, qualcosa di simile aselect
tabella2.*
from
(select
mytable1.id,
max(mytable2.campo)
from (select
id
from
tabella1
where
stato <> 0
order by
voto desc limit 0,15
)table1,
(select
id,
campo
from
tabella2
)mytable2
where
mytable1.id=mytable2.id
group by
mytable1.id
)mytable3,
tabella2
where
mytable3.id=tabella2.id and
mytable3.campo=tabella2.campo L'esempio è comunque inutile se esistono più record in tabella2 con gli stessi valori di id e campo.
In ogni caso se non riesci ad identificare in modo univoco il singolo record in tabella2 devi per forza esaminare il set dei risultati al di fuori del DBMS.
OK grazie mille della collaborazione, proverò a fare qualcosa a partire dalla tua soluzione.
grazie
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.