• User

    Problema con inner join

    Salve ragazzi. Il problema è il seguente. Ho tre tabelle, che memorizzano dati di clienti, eventi e ordini. Vi mostro la struttura. La prima, utenti:

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

    La seconda, eventi:

    CREATE TABLE eventi (
    event_id int(5) unsigned NOT NULL auto_increment,
    evento text NOT NULL,
    luogo text NOT NULL,
    dataevento varchar(50) NOT NULL default '',
    ora varchar(50) NOT NULL default '',
    descrizione text NOT NULL,
    disponibilita int(3),
    prezzo decimal (5,2),
    autore varchar(50) NOT NULL default '',
    data timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
    nome 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)
    )

    La terza, ordini:
    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)
    )

    Come vedete nell'ultima ho i campi che mettono in relazione le tre tabelle. In questo modo vorrei ottenere, in una pagina, tutti i dati relativi agli acquisti effettuati da un determinato utente. Ad esempio, l'utente 1 che eventi ha acquistato, quanti biglietti per singolo evento, il costo totale. La query sarebbe questa, ma da un problema.

    [PHP]
    <?php
    include("config.php");
    mysql_connect($db_host,$db_user,$db_password,$db_name) or die ("non riesco a connettermi");
    mysql_select_db("$db_name") or die ("Non riesco a selezionare il database");
    if(empty($_GET["id"])){
    echo"Non hai selezionato nulla";
    }
    else{

    $dati = mysql_query("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 utenti.utente_id ='".$_GET['id']."'") or die( mysql_error() . "<br>" . $sql);
    $array = mysql_fetch_array($dati);

    echo "<h3>Evento acquistato</h3> $array[evento]<br><br>";
    echo "<h3>Biglietti acquistati</h3> $array[numero]<br><br>";
    echo "<h3>Costo totale:</h3> $array[totale]<br>";
    echo "Acquistato il ".substr($array ['dataora'],0,10)." alle ". substr($array ['dataora'],11,5);
    mysql_close();
    }
    ?>
    [/PHP]

    Il problema è semplice, l'esecuzione di questa query mi da solo un risultato, il primo acquisto effettuato da un determinato utente. Dal primo in poi nulla. Esce fuori solo il primo, gli altri eventualmente fatti è come se non esistano all'interno del database. Come mai? Io vorrei che uscisse fuori la lista di tutti gli ordini effettuati, con nome e cognome dell'utente, la sua via, numero civico, eventi acquistati, numero biglietti per singolo evento, totale costo dei biglietti acquistati per ogni singolo evento.

    Perchè non salta fuori, dove sto sbagliando?


  • User

    Ciao,
    non sono sicuro, gli inner join sono un po' duri da digerire, ma prova cosi FROM (ordini INNER JOIN utenti ON ordini.utent_id = utenti.utente_id) INNER JOIN eventi ON ordini.eventi_id = eventi.eventi_id;, cioè mettendo delle parentesi sul primo inner join


  • User

    Il problema della query l'ho risolto.
    Piuttosto, all'interno della query

    SELECT utenti., eventi.evento as strEvento, ordini.
    FROM utenti
    INNER JOIN ordini ON ordini.utente_id = utenti.utente_id
    INNER JOIN eventi ON eventi.event_id = ordini.event_id
    WHERE utenti.utente_id ='".$_GET['id']."' Order by ordine_id Desc LIMIT $primo, $per_page"

    vorrei inserire la stringa

    date_format(data,'%d-%m-%Y %H:%i') AS 'dataora'

    ma non c'è verso!! Ho provato in vari modi ma nulla. Come posso fare?