Visualizzazione risultati 1 fino 5 di 5

Discussione: Problema lettura risultato di una query

  1. #1
    Guest

    Predefinito Problema lettura risultato di una query

    Salve a tutti. Io ho la seguente query:

    Codice PHP:
    $query = "SELECT SUM(TT.Punti) AS Punteggio
    FROM Precedenti P, Tornei T, Tipo_Torneo TT
    WHERE P.TORNEO=T.NomeT AND
    T.Tipo=TT.Tipo AND
    P.LIVELLO=TT.Livello AND
    P.SCONFITTO='
    $player[$i][Cod]' AND
    P.ANNO='
    $anno'";
    Questa query la processo nel seguente modo:

    Codice PHP:
    $result = mysql_query($query, $db);
    A questo punto faccio il controllo che $result non sia null, poi stampo il numero di righe che ha restituito la query tramite mysql_num_rows e ottengo correttamente 1, a quel punto vorrei utilizzare i dati ricavati da essa: per farlo uso il seguente codice:

    Codice PHP:
    while ($row = mysql_fetch_array($result)){
    $player[$i][Punti] = $row[Punteggio];
    }
    (tenete presente che sono dentro un ciclo dettato dalla variabile $i e che le variabili $player di vario tipo che potreste trovare in questi codici sono tutte correttamente inizializzate; ho già fatto i test con l'echo per questo)

    Qual è il problema? Il problema è che la variabile $row[Punteggio] per qualche strano motivo è sempre vuota.....quindi come devo fare per leggere il risultato della mia query? oppure, dove sta l'errore?

    Grazie mille :)

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

    Predefinito

    La variabile è vuota perché il suo valore è NULL. Se il valore di una somma è NULL, è perché nel recordset su cui deve essere eseguita la somma non ci sono righe.

    (vedi: http://dev.mysql.com/doc/refman/5.0/...l#function_sum).

    Nel tuo caso, sembra esserci una condizione di troppo nella query: fai una join tra "P" e "T", un'altra tra "T" e "TT", ma perché farla anche tra "P" e "TT"?

    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...

  3. #3
    Guest

    Predefinito

    la query è stata testata direttamente dal pannello di phpmyadmin è da il risultato corretto, cioè da una sola colonna di nome Punteggio che contiene una sola tupla con il valore somma corretto. Infatti la funzione mysql_num_rows restituisce 1, ovvero mi dice che la query ha restituito 1 riga...come deve essere.

    Il doppio join è necessario perchè per ogni tipo di torneo ci sono vari livelli, e per ogni livello ci sono vari tipi di tornei...quindi è necessario specificarli tutti e 2.

    Cmq ripeto, la query va a buon fine, lo dimostra il fatto che non mi viene restituito nessun errore e che il numero di righe restituite è 1, l'unica cosa che non riesco a fare è leggere il valore restituito

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

    Predefinito

    Citazione Originalmente inviato da mydatawebspace Visualizza messaggio
    ...
    Il doppio join è necessario perchè per ogni tipo di torneo ci sono vari livelli, e per ogni livello ci sono vari tipi di tornei...quindi è necessario specificarli tutti e 2.
    Appunto, le condizioni di join dovrebbero essere due, non tre, a mio parere... poi non conoscendo nei dettagli lo schema posso essere benissimo smentito.

    Citazione Originalmente inviato da mydatawebspace Visualizza messaggio
    Cmq ripeto, la query va a buon fine, lo dimostra il fatto che non mi viene restituito nessun errore e che il numero di righe restituite è 1, l'unica cosa che non riesco a fare è leggere il valore restituito
    Notavo ora che c'è un altro errore nella query: quando usi variabili composte dentro una stringa, devi rinchiuderle tra parentesi graffe o concatenarle usando l'operatore punto, così:
    Codice PHP:
    $query = "SELECT SUM(TT.Punti) AS Punteggio
    FROM Precedenti P, Tornei T, Tipo_Torneo TT
    WHERE P.TORNEO=T.NomeT AND
    T.Tipo=TT.Tipo AND
    P.LIVELLO=TT.Livello AND
    P.SCONFITTO='
    {$player[$i]['Cod']}' AND
    P.ANNO='
    $anno'";
    oppure
    Codice PHP:
    $query = "SELECT SUM(TT.Punti) AS Punteggio
    FROM Precedenti P, Tornei T, Tipo_Torneo TT
    WHERE P.TORNEO=T.NomeT AND
    T.Tipo=TT.Tipo AND
    P.LIVELLO=TT.Livello AND
    P.SCONFITTO='"
    . $player[$i]['Cod'] . "' AND
    P.ANNO='
    $anno'";
    o ancora meglio:
    Codice PHP:
    $query = "SELECT SUM(TT.Punti) AS Punteggio
    FROM Precedenti P, Tornei T, Tipo_Torneo TT
    WHERE P.TORNEO=T.NomeT AND
    T.Tipo=TT.Tipo AND
    P.LIVELLO=TT.Livello AND
    P.SCONFITTO='"
    . mysql_real_escape_string ($player[$i]['Cod']) . "' AND
    P.ANNO='
    $anno'";
    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...

  5. #5
    Guest

    Predefinito

    Ah ecco sulle variabili composte non lo sapevo, appena posso provo. Intanto grazie mille per la dritta

    ps. per i join so anche io che solitamente è così, le condizioni di join sono sempre una in meno rispetto al num delle tabelle, però in questo caso è diverso, perchè una tabella contiene una condizione molti a molti che mi obbliga ad inserire anche questa ulteriore opzione. Potrei anche spiegarti i dettagli, ma non essendo li l'errore (su phpmyadmin funziona) e non essendo tu interessato a questo particolare database, non ne vedo il motivo :P

    Ciao!

Regole di scrittura

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