MYSQL e PHP Query e sottoquery

booklisa

Utente Attivo
10 Nov 2016
52
0
6
33
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.
 

booklisa

Utente Attivo
10 Nov 2016
52
0
6
33
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.



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)
 

marino51

Utente Attivo
28 Feb 2013
2.931
166
63
Lombardia
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

booklisa

Utente Attivo
10 Nov 2016
52
0
6
33
Roma
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!