Algoritmo:
Ho due tabelle, una dei post e una dei commenti, quella con i commenti ha due colonne importanti: postid e userid (postid = su quale post ha commentato, userid = chi ha commentato). La tabella post ha i dati del post, nulla di che (id del post, userid, ...).
Vorrei prendere i commenti che ho scritto IO (userid = ...) con i relativi post.
Per esempio, se uno ha commentato 10 volte su un post, verranno fuori 10 commenti e con sotto lo stesso post
In pratica devo vedere dove ho commentato, devo prendere il post e prendere tutti i commenti che ho fatto, metterli in una lista, e fare lo stesso con gli altri post
Solo che spesso si bugga, e visualizza anche commenti di altri (filtro WHERE userid = ... che sembra non funzionare, ma probabilmente sono io che incasino sempre tutto).
Nel caso in cui non capiate cosa c'è scritto sotto, ecco la parte di codice interessata:
Codice PHP:
$query6 = mysql_query("SELECT * FROM comments WHERE userid = '$profilename' ORDER BY timestamp ASC LIMIT 1");
while($riga6 = mysql_fetch_row($query6))
{
$commentpostid1 = $riga6[1];
$postid1 = $commentpostid1;
$query5 = mysql_query("SELECT * FROM posts WHERE id = $postid1 ORDER BY timestamp ASC LIMIT $max");
while($riga5 = mysql_fetch_row($query5))
{
dati del post...
if(controllo dei dati (se non ce n.è nessuno vuoto))
{
apre la lista dei commenti...
$query7 = mysql_query("SELECT * FROM comments WHERE postid = $postid1 ORDER BY timestamp ASC");
while($riga7 = mysql_fetch_row($query7))
{
dati del commento...
scrive i dati del commento e del post, chiudendo tutti gli elementi in lista (<li>..</li>...)
}
}
chiude la lista (</ul>) e chiude anche cose tipo tabelle, ecc.. aperte in precedenza (sempre dentro a questo codice, dove 'apre la lista dei commenti'
}
}
Vi sintetizzo il diagramma di flusso che ho pensato per risolvere l'algoritmo soprastante:
['solo se' = WHERE, 'prende' = SELECT, 'limite' = LIMIT]
Query che prende i commenti solo se l'id di chi ha postato il commento è quello che ho selezionato, in ordine ascendente, con limite 1.
Codice PHP:
$query6 = mysql_query("SELECT * FROM comments WHERE userid = '$profilename' ORDER BY timestamp ASC LIMIT 1");
apro il rispettivo while
Codice PHP:
while($riga6 = mysql_fetch_row($query6))
DENTRO AL WHILE:
ricevo id del post dove è stato postato il commento
Query che prende i post solo se l'id di quest'ultimo è quello dove è stato postavo il commento, in ordine ascendente, con limite $max (50, di base)
Codice PHP:
$query5 = mysql_query("SELECT * FROM posts WHERE id = $postid1 ORDER BY timestamp ASC LIMIT $max");
apro il rispettivo while
Codice PHP:
while($riga5 = mysql_fetch_row($query5))
DENTRO AL WHILE CHE È DENTRO AL WHILE:
ricevo i dati del post
apro la lista dei commenti
Query che prende i commenti solo se l'id del post dove sono stati postati è quello del post equivalente (quello di prima), in ordine ascendente
Codice PHP:
$query7 = mysql_query("SELECT * FROM comments WHERE postid = $postid1 ORDER BY timestamp ASC");
apro il rispettivo while
Codice PHP:
while($riga7 = mysql_fetch_row($query7))
DENTRO AL WHILE CHE È DENTRO AL WHILE CHE È DENTRO AL WHILE (lol):
scrivo tutti i dati in HTML, chiudendo la lista dei commenti, etc.
e chiudo ogni while quando serve.