- Home
- Categorie
- Coding e Sistemistica
- Coding
- Problema con inner join
-
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_idint(3) NOT NULL auto_increment,
usernamevarchar(30) NOT NULL default '',
passwordvarchar(34) NOT NULL,
confermapasswordvarchar(34) NOT NULL,
nomevarchar(30) NOT NULL default '',
cognomevarchar(30) NOT NULL default '',
giornoint(2) NOT NULL default '',
meseint(2) NOT NULL default '',
annoint(4) NOT NULL default '',
capint(10) NOT NULL default '',
provinciavarchar(30) NOT NULL default '',
indirizzovarchar(30) NOT NULL default '',
civicoint(5) NOT NULL default '',
mailchar(255) NOT NULL default '',
datatimestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
ipchar(15) NOT NULL default '',
PRIMARY KEY (utente_id),
UNIQUE KEYid(utente_id),
KEYid_2(utente_id)
)La seconda, eventi:
CREATE TABLE
eventi(
event_idint(5) unsigned NOT NULL auto_increment,
eventotext NOT NULL,
luogotext NOT NULL,
dataeventovarchar(50) NOT NULL default '',
oravarchar(50) NOT NULL default '',
descrizionetext NOT NULL,
disponibilitaint(3),
prezzodecimal (5,2),
autorevarchar(50) NOT NULL default '',
datatimestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
nomevarchar(50) NOT NULL default '',
sizevarchar(25) NOT NULL default '',
typevarchar(25) NOT NULL default '',
immaginelongblob NOT NULL,
pubint(1) NOT NULL default '0',
PRIMARY KEY (event_id)
)La terza, ordini:
CREATE TABLEordini(
ordine_idint(5) NOT NULL auto_increment,
utente_idint(5) NOT NULL,
event_idint(5) NOT NULL,
numeroint(5),
totaledecimal (5,2),
datatimestamp 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?
-
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
-
Il problema della query l'ho risolto.
Piuttosto, all'interno della querySELECT 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?