MYSQL e PHP Query e sottoquery

booklisa

Utente Attivo
10 Nov 2016
52
0
6
37
Roma
Posto una Query di seguito, ve la lascio qui, se vi va di darle un'occhiata.
Grazie a prescindere.


Select *
from Giallo g
inner join
(SELECT userid, MAX(data) as max_data
FROM Giallo
group by userid) a
on a.userid = g.userid and a.max_data = data
Where g.colore = '$colore' and g.idpagina = '$idpagina'


Il where dovrebbe andare prima e tra parentesi?


Cosa deve fare questa query?
Presto detto:

In una tabella "Giallo" deve andare a vedere per ogni idutente se l'ultimo valore che questi ha inserito max_data (in termini di tempo) è corrispondente o meno al valore "colore" che gli passo, il tutto in relazione ad uno specifico id pagina.
 
Posto una Query di seguito, ve la lascio qui, se vi va di darle un'occhiata.
Grazie a prescindere.


Select *
from Giallo g
inner join
(SELECT userid, MAX(data) as max_data
FROM Giallo
group by userid) a
on a.userid = g.userid and a.max_data = data
Where g.colore = '$colore' and g.idpagina = '$idpagina'


Il where dovrebbe andare prima e tra parentesi?


Cosa deve fare questa query?
Presto detto:

In una tabella "Giallo" deve andare a vedere per ogni idutente se l'ultimo valore che questi ha inserito max_data (in termini di tempo) è corrispondente o meno al valore "colore" che gli passo, il tutto in relazione ad uno specifico id pagina.




Spiego meglio:


Caso di test 1

Query:

Select *
from Colore g
inner join
(SELECT userid,MAX(data) as max_data
FROM Colore
group by userid) a
on a.userid = g.userid and a.max_data = data
Where g.colore = #ff0000 and g.idpagina = 1

= MySQL ha restituito un insieme vuoto (i.e. zero righe). (La query ha impiegato 0.0011 sec) (ovvero non esegue il controllo)

Query:

Select *
from Colore
Where colore = #ff0000 and idpagina = 1

= Mostro le righe 0 - 6 (7 total, La query ha impiegato 0.0003 sec) [id: 65 - 284]

Query:

Select *
from Colore g
inner join
(SELECT userid,MAX(data) as max_data
FROM Colore
group by userid) a
on a.userid = g.userid and a.max_data = data
// senza ---Where g.colore = #ff0000 and g.idpagina = 1

= Mostro le righe 0 - 29 (40 total, La query ha impiegato 0.0010 sec)
 
prova così, formalmente è corretta (provata) non so se ottiene quello che ti aspetti
PHP:
SELECT g.userid, MAX(g.data) as max_data, a.*
FROM giallo g
INNER JOIN giallo a
on g.userid=a.userid and g.max_data=a.data and g.colore=a.colore and g.idpagina=a.idpagina
where g.colore = 'yellow' and g.idpagina = 'mypage'
GROUP BY g.userid
 
  • Like
Reactions: booklisa
prova così, formalmente è corretta (provata) non so se ottiene quello che ti aspetti
PHP:
SELECT g.userid, MAX(g.data) as max_data, a.*
FROM giallo g
INNER JOIN giallo a
on g.userid=a.userid and g.max_data=a.data and g.colore=a.colore and g.idpagina=a.idpagina
where g.colore = 'yellow' and g.idpagina = 'mypage'
GROUP BY g.userid

Grazie,
ho apportato una soluzione molto simile a quella che mi hai suggerito e funziona!
 

Discussioni simili