Visualizzazione risultati 1 fino 4 di 4

Discussione: [PHP] Gestione di più query in più while

  1. #1
    Guest

    Predefinito [PHP] Gestione di più query in più while

    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.
    Ultima modifica di netpost : 21-04-2011 alle ore 13.38.33 Motivo: Ho messo il punto e non l'apostrofo in 'n.è' perchè il testo si buggava

  2. #2
    programmazioned non è connesso Utente attivo
    Data registrazione
    25-03-2008
    Messaggi
    440

    Predefinito

    Ommioddio, che confusione!

    Premesso che manca la domanda a cui rispondere, non sono sicuro di aver capito bene cosa intendi fare. E' possibile che quelle tre query siano riducibili ad una sola (v. join), ma devi specificare meglio cosa vuoi realizzare e com'è strutturato il database.

    Ciao!

  3. #3
    L'avatar di dementialsite
    dementialsite non è connesso Super Moderatore
    Data registrazione
    19-10-2004
    Residenza
    fuori Padova
    Messaggi
    5,046

    Predefinito

    Non mi piace quel "timestamp" sulla clausola ORDER BY della query, visto che è una parola chiave di MySQL...

    Stammi bene...
    Le questioni tecniche hanno risposte migliori nel forum pubblico, non trovi?

    When you don't know your next step... improvise

    ALTERVISTA WANTS YOU!
    Vuoi diventare moderatore su AlterVista? Scopri come...

  4. #4
    Guest

    Predefinito

    Ecco, in effetti stanotte ho pensato al fatto che non ho specificato cosa voglio fare.
    So che c'è molta confusione , scusate <.<

    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)

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •