- Home
- Categorie
- Coding e Sistemistica
- PHP
- 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_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 KEYid
(utente_id
),
KEYid_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 TABLEordini
(
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?
-
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?