- Home
- Categorie
- Coding e Sistemistica
- PHP
- Problema con inner join
-
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 KEYid
(organizzatore_id
),
KEYid_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 KEYid
(utente_id
),
KEYid_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!!!!
-
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
- Cosa contiene la variabile $query? Spero che sia stato un errore di trascrizione.. La query dovresti averla eseguita così: