• User

    Problema con inner join

    Salve ragazzi, ecco il mio problema. Ho diverse tabelle, di cui vi posto il codice:

    CREATE TABLE eventi (
    event_id int(5) unsigned NOT NULL auto_increment,
    organizzatore_id int(3) NOT NULL,
    evento text NOT NULL,
    luogo text NOT NULL,
    giorno int(2) NOT NULL default '',
    mese int(2) NOT NULL default '',
    anno int(4) NOT NULL default '',
    ora int (4) NOT NULL default '',
    oraporte time NOT NULL,
    descrizione text NOT NULL,
    biglietti int(3),
    disponibilita int(3),
    prezzo decimal (5,2),
    comunicazioni text NOT NULL,
    autore varchar(50) NOT NULL default '',
    data timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
    foto varchar(50) NOT NULL default '',
    size varchar(25) NOT NULL default '',
    type varchar(25) NOT NULL default '',
    immagine longblob NOT NULL,
    pub int(1) NOT NULL default '0',
    PRIMARY KEY (event_id)
    )

    CREATE TABLE ordini (
    ordine_id int(5) NOT NULL auto_increment,
    utente_id int(5) NOT NULL,
    event_id int(5) NOT NULL,
    numero int(5),
    totale decimal (5,2),
    data timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
    PRIMARY KEY (ordine_id)
    )

    CREATE TABLE organizzatori (
    organizzatore_id int(3) NOT NULL auto_increment,
    usernamepromoter varchar(30) NOT NULL default '',
    password varchar(34) NOT NULL,
    confermapassword varchar(34) NOT NULL,
    organizzazione varchar(30) NOT NULL default '',
    partitaiva varchar(30) NOT NULL default '',
    codicefiscale varchar(30) NOT NULL default '',
    cap int(10) NOT NULL default '',
    provincia varchar(30) NOT NULL default '',
    indirizzo varchar(30) NOT NULL default '',
    civico int(5) NOT NULL default '',
    mail char(255) NOT NULL default '',
    data timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
    ip char(15) NOT NULL default '',
    PRIMARY KEY (organizzatore_id),
    UNIQUE KEY id (organizzatore_id),
    KEY id_2 (organizzatore_id)
    )

    CREATE TABLE utenti (
    utente_id int(3) NOT NULL auto_increment,
    username varchar(30) NOT NULL default '',
    password varchar(34) NOT NULL,
    confermapassword varchar(34) NOT NULL,
    nome varchar(30) NOT NULL default '',
    cognome varchar(30) NOT NULL default '',
    giorno int(2) NOT NULL default '',
    mese int(2) NOT NULL default '',
    anno int(4) NOT NULL default '',
    cap int(10) NOT NULL default '',
    provincia varchar(30) NOT NULL default '',
    indirizzo varchar(30) NOT NULL default '',
    civico int(5) NOT NULL default '',
    mail char(255) NOT NULL default '',
    data timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
    ip char(15) NOT NULL default '',
    PRIMARY KEY (utente_id),
    UNIQUE KEY id (utente_id),
    KEY id_2 (utente_id)
    )

    Spiego in parole semplici come funziona il tutto. Ho utenti che si registrano. Possono acquistare degli eventi. L'acquisto va a confluire nella tabella ordini, ove ho i campi: event_id, utente_id e ordine_id. I primi due sono di collegamento con le tabelle eventi e utenti.

    Ora, la tabella eventi contiene anche un campo organizzatore_id, in modo che sia collegata alla tabella organizzatori.

    L'organizzatore vuole sapere, per gli eventi che ha inserito, la lista di persone che hanno acquistato, con nomi, cognomi, numero di biglietti, totale in Euro. I primi dati vanno estratti dalla tabella utenti, i secondi dalla tabella ordini.

    L'organizzatore entra in un suo archivio eventi, dove vede tutti gli eventi che ha inserito. Clikka su uno dei tanti, gi si pare una pagine che mostra i dettagli per quell'evento. Ecco quindi che nella pagina dei dettagli passa anche l'id relativo a quell'evento. Ora, questo id dovrebbe anche essere presente nella tabella ordini, visto che un utente potrebbe aver acquistato biglietti per quell'evento.

    La qury dovrebbe pertanto dirmi, per quell'evento, chi ha acquistato, quindi nome, cognome, quanti biglietti, quindi campo numero da tabella ordini, e totale, ossia prezzo per numero biglietti. Il prezzo è contenuto nella tabella eventi.

    Ora, mi sembra che le tabelle siano collegate correttamente. Per verificare, le ho postate prima con tutti i campi che contengono.

    Ma la query che eseguo non ne vuole sapere di funzionare!! Ho provato mille modifiche. Eccola:

    "SELECT utenti., eventi., ordini.*
    FROM utenti
    INNER JOIN ordini ON ordini.utente_id = utenti.utente_id
    INNER JOIN eventi ON eventi.event_id = ordini.event_id
    WHERE ordini.event_id ='".$_GET['id']."' Order by ordini.event_id Desc"

    Mi da sempre lo stesso risultato. Esempio. Faccio acquisti con due utenti diversi: Ivan, SAra. Cosa mi da? Sempre Ivan, e mi estrae solo 2 record. Ossia, se anche gli acquisti sono 10, mi da sempre 2 risultati.

    Risultati che ottengo così:

    Code:

    $str = '<table border=0 bordercolor=#000000>';
    $str.= '<thead>';
    $str.= '<tr>';
    $str.= '<th style='padding-right:20px;'>Nome</th>';
    $str.= '<th style='padding-right:20px;'>Numero biglietti</th>';
    $str.= '</tr>';
    $str.= '</thead>';
    $str.= '<tbody>';

    while($results = mysql_fetch_array($query)) {

        $str.='<tr>';  
        $str.='<td style=\'padding-right:20px; text-align:center\'>'.$results['nome'].'</td>'; 
        $str.='<td style=\'padding-right:20px; text-align:center\'>'.$results['numero'].'</td>'; 
        $str.='</tr>';  
    

    $str.= '</tbody>';
    $str.= '</table>';
    echo $str;

    Dove diamine sbaglio. Sono tre giorni che non ne vengo a capo!!!!


  • User Attivo

    Ho due consigli, che poi mi dirai se sono stati utili oppure no...

    • Cosa contiene la variabile $query? Spero che sia stato un errore di trascrizione.. La query dovresti averla eseguita così:
      [php]// 1. esegui la query
      $result = mysql_query($query, $connessione) or die("<br />Errore nell'esecuzione della query: ".mysql_error());

    // 2. suddividi ogni riga dell'array $result in diversi campi e stampi i campi necessari
    while($row = mysql_fetch_array($result)) {
    $str.='<tr>';
    $str.='<td style='padding-right:20px; text-align:center'>'.$row['nome'].'</td>';
    $str.='<td style='padding-right:20px; text-align:center'>'.$row['numero'].'</td>';
    $str.='</tr>';
    }

    // 3. chiudi la tabella che prima del while dovresti avere aperto
    $str.= '</tbody>';
    $str.= '</table>';
    echo $str;
    [/php]

    • Se hai eseguito correttamente ciò che ho scritto sopra, prova ad utilizzare i LEFT JOIN invece che gli INNER JOINSpero di esserti stato utile 😄