• User Newbie

    Aiuto per query di selezione

    Salve, ho un DB con le seguenti 3 tabelle:

    persone
    -id
    -nome

    • cognome

    persone_tornei
    -id_persona
    -ID_torneo

    tornei
    -ID
    -torneo

    • anno
    • tipologia_torneo

    Devo fare una pagina per gestire le iscrizioni ai tornei che mi visualizzi per la persona richiamata nell'URL le seguenti informazioni:

    Nome
    
    **Torneo           Situazione                 Gestisci**
    Risiko             Iscritto               Cancella
    Monopoli         Non Iscritto         Iscrivi
    

    Io ho creato il seguente codice ma non funziona come vorrei:

    [PHP]
    <?php
    require_once "header.php";
    include "connect.php";

    echo "<a href='index.htm'>Torna alla home</a>";
    //Prendi id persona e identificala
    $id = $_GET['id'];
    $anno = $_GET['anno'];
    $tipo = $_GET['tipo'];

    $persona = @mysql_query("SELECT nome, cognome FROM persone WHERE id='$id' ");
    if (!$persona) {
    exit('<p>Persona non trovata<br/>'.'Error: '.mysql_error().'</p>');
    }
    $persona = @mysql_fetch_array($persona);
    echo "<h2>Elenco tornei per ".$persona['cognome']." ".$persona['nome']."</h2>";

    //Tabella tornei a cui puoi iscriversi
    $tornei_esistenti = @mysql_query("SELECT tornei.ID AS ID, tornei.torneo AS torneo FROM tornei WHERE tornei.anno='$anno' AND tornei.tipologia_torneo='$tipo' ");
    if (!$tornei_esistenti) {
    exit('<p>Errore nella selezione dei tornei <br/>'.'Error: '.mysql_error().'</p>');
    }

    $tornei_iscritti = @mysql_query("SELECT ID_torneo FROM persone_tornei WHERE ID_persona='$id' ");
    if (!$tornei_iscritti) {
    exit('<p>Errore nella selezione dei tornei iscritti<br/>'.'Error: '.mysql_error().'</p>');
    }

    echo "<table border='1' bordercolor='#0000CC' cellpadding='5' cellspacing='0'><tr>";
    echo "<td><b>Torneo</b></td>";
    echo "<td><b>Situazione</b></td>";
    echo "<td><b>Gestione</b></td></tr>";

    while ($torneo_esistente = @mysql_fetch_array($tornei_esistenti)) {
    while ($torneo_iscritto = @mysql_fetch_array($tornei_iscritti)) {
    if ($torneo_esistente['ID']==$torneo_iscritto['ID_torneo']) {
    echo "<tr>";
    echo "<td>".$torneo_esistente['torneo']."</td>";
    echo "<td>Iscritto </td>";
    echo "<td><a href='cancella_torneo_iscritto.php?id=".$torneo_iscritto['ID_torneo']."'>Cancella</a></td></tr>";
    }
    else {
    echo "<tr>";
    echo "<td>".$torneo_esistente['torneo']."</td>";
    echo "<td>Non iscritto</td>";
    echo "<td><a href='cancella_torneo_iscritto.php?id=".$torneo_iscritto['ID_torneo']."'>Iscrivi</a></td></tr>";
    }
    }
    }

    echo "</table>";

    require_once "footer.php";

    ?>

    [/PHP]

    In pratica non penso che funzionino i due cicli while annidati ( e forse non è il modo più semplice per ottenerlo).
    Qualcuno ha qualche suggerimento?

    Grazie


  • ModSenior

    Sarebbe meglio facessi il tutto facendo delle JOIN sulle varie tabelle in questo modo ti risparmi cicli annidati o altro.


  • User Newbie

    ho seguito il consiglio, ho stravolto tutto il codice e sono riuscito a farlo funzionare

    ecco il codice
    [PHP]<?php
    require_once "header.php";
    include "connect.php";
    include "core.php";

    //Prendi id persona e identificala
    $id = $_GET['id'];
    $anno = $_GET['anno'];
    $tipo = $_GET['tipo'];

    $persona = dbarray(dbquery("SELECT nome, cognome FROM persone WHERE id='$id' "));
    echo "<h2>Elenco tornei per ".$persona['cognome']." ".$persona['nome']."</h2>";

    //Tabella elenco tornei
    $tornei = dbquery("SELECT tt.ID, tt.torneo, pt.ID_persona
    FROM tornei tt
    LEFT JOIN persone_tornei pt ON tt.ID=pt.ID_torneo
    WHERE tt.anno='$anno' AND tt.tipologia_torneo='$tipo' ");

    echo "<table border='1' bordercolor='#0000CC' cellpadding='5' cellspacing='0'><tr>";
    echo "<td><b>Torneo</b></td>";
    echo "<td><b>Stato</b></td>";
    echo "<td><b>Gestione</b></td></tr>";

    while ($torneo = dbarray($tornei)) {

    echo "<tr>";
    echo "<td>".$torneo['torneo']."</td>";
    echo "<td>".(($id == $torneo['ID_persona']) ? "Iscritto" : "Non iscritto")."</td>";
    echo "<td>".(($id == $torneo['ID_persona']) ? "<a href='cancella_persona_torneo.php?ID=".$torneo['ID_persona']."'>Cancella</a>" : "<a href='iscrivi_persona_torneo.php?ID=".$torneo['ID_persona']."'>Iscrivi</a>")."</td></tr>";
    

    }

    echo "</table>";

    require_once "footer.php";

    ?>[/PHP]


  • ModSenior

    Forse mi sfugge qualcosa vista l'ora... 😄
    Ma non potevi fare il JOIN anche con la tabella persone con le altre due?
    L'ID non corrisponde a IDPersona?