Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 19
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2006
    Messaggi
    555

    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.

    Codice 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() . "
    $sql);
    $array mysql_fetch_array($dati);

    echo 
    "<h3>Evento acquistato</h3> $array[evento]

    "

    echo 
    "<h3>Biglietti acquistati</h3> $array[numero]

    "

    echo 
    "<h3>Costo totale:</h3> $array[totale]
    "
    ;
    echo 
    "Acquistato il ".substr($array ['dataora'],0,10)." alle "substr($array ['dataora'],11,5);
    mysql_close();
    }
    ?>
    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?

  2. #2
    Utente di HTML.it
    Registrato dal
    May 2006
    Messaggi
    555
    Ho provato alcune soluzioni ma non riesco a risolvere il problema....

  3. #3
    codice:
    SELECT utenti.*, eventi.*, ordini.*
    FROM utenti u, ordini o, eventi e where
    o.utente_id = u.utente_id
    e.event_id = o.event_id
    prova un bo
    http://www.anobii.com/isalreadyinuse

  4. #4
    la tua query è giusta. hai provato a lanciarla sul tuo db in qualche altro modo, per assicurarti che effettivamente procuri dei risultati?

  5. #5
    a proposito...essendo l'id utente un int non dovresti racchiuderlo tra apici nell'ultimo where. però in pratica dovrebbe funzionare lo stesso con molti tipi di db...

  6. #6
    Utente di HTML.it
    Registrato dal
    May 2006
    Messaggi
    555
    Allora,
    questa query

    SELECT utenti.*, eventi.*, ordini.*
    FROM utenti u, ordini o, eventi e where
    o.utente_id = u.utente_id
    e.event_id = o.event_id

    mi da il seguente errore: Errore di sintassi nella query SQL vicino a 'e.event_id = o.event_id' linea 4

    Per quanto riguarda la prova di esecuzione dell'altra query (la mia) all'interno del database, ho provato già ieri con phpMyadmin. Non mi da errori, la esegue con successo. Ma so dove andare a visualizzare il risultato.

    Credo comunque che se non mi da errori, allora sia giusta, corretta almeno dal punto di vista della sintassi. Non però dal punto di vista del risultato che voglio, perchè mi da, come detto, sempre e solo il primo acquisto effettuato da quel determinato utente. Gli altri acquisti fatti, dal 2 a x.... è come se non esistano.

  7. #7
    Originariamente inviato da marckhh
    Allora,
    questa query

    SELECT utenti.*, eventi.*, ordini.*
    FROM utenti u, ordini o, eventi e where
    o.utente_id = u.utente_id
    e.event_id = o.event_id

    mi da il seguente errore: Errore di sintassi nella query SQL vicino a 'e.event_id = o.event_id' linea 4

    Per quanto riguarda la prova di esecuzione dell'altra query (la mia) all'interno del database, ho provato già ieri con phpMyadmin. Non mi da errori, la esegue con successo. Ma so dove andare a visualizzare il risultato.

    Credo comunque che se non mi da errori, allora sia giusta, corretta almeno dal punto di vista della sintassi. Non però dal punto di vista del risultato che voglio, perchè mi da, come detto, sempre e solo il primo acquisto effettuato da quel determinato utente. Gli altri acquisti fatti, dal 2 a x.... è come se non esistano.

    SELECT utenti.*, eventi.*, ordini.*
    FROM utenti u, ordini o, eventi e where
    o.utente_id = u.utente_id
    and
    e.event_id = o.event_id

    ci voleva un and potevi arrivarci
    http://www.anobii.com/isalreadyinuse

  8. #8
    allora....se il problema è che la query avviene ma ti dà risultati inaspettati prova a mettere un po' di parentesi!!! probabilmente il where ti viene fatto sull'ultima select e tu vuoi farla globalmente, quindi devi fare select ... from ((a inner join b on ...) inner join c on ...) where id>....
    prova a vedere se così cambia qualcosa...

  9. #9
    Utente di HTML.it
    Registrato dal
    May 2006
    Messaggi
    555
    SELECT utenti.*, eventi.*, ordini.*
    FROM utenti u, ordini o, eventi e where
    o.utente_id = u.utente_id
    and
    e.event_id = o.event_id

    Ora mi dice che la tabella utenti è sconosciuta! Ma la tabella in database c'è eccome!

  10. #10
    Originariamente inviato da marckhh
    SELECT utenti.*, eventi.*, ordini.*
    FROM utenti u, ordini o, eventi e where
    o.utente_id = u.utente_id
    and
    e.event_id = o.event_id

    Ora mi dice che la tabella utenti è sconosciuta! Ma la tabella in database c'è eccome!
    SELECT u.*, e.*, o.*
    FROM utenti u, ordini o, eventi e where
    o.utente_id = u.utente_id
    and
    e.event_id = o.event_id
    http://www.anobii.com/isalreadyinuse

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.