|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Feb 2001
Messaggi: 318
|
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 Ultima modifica di skp : 05-06-2007 alle 15:40. |
![]() |
![]() |
![]() |
#2 | |
Senior Member
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
|
Quote:
Codice:
"SELECT * FROM tabella2 WHERE ID IN ($id[1], $id[2], ..., $id[n], ) ![]() Io te la posso fare in bash, C .. ma in PHP no
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z ∞Mb - Win Eight SP (1 > yours) 16 Valve |
|
![]() |
![]() |
![]() |
#3 | |
Senior Member
Iscritto dal: Feb 2001
Messaggi: 318
|
Quote:
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 Ultima modifica di skp : 05-06-2007 alle 16:09. |
|
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Oct 1999
Messaggi: 1565
|
Dipende, se la coppia di valori (id, campo) è univoca in tabella2 è possibile costruire una subquery che determina le coppie di interesse, qualcosa di simile a
Codice:
select 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 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. |
![]() |
![]() |
![]() |
#5 | |
Senior Member
Iscritto dal: Feb 2001
Messaggi: 318
|
Quote:
grazie |
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 03:17.