- Home
- Categorie
- Coding e Sistemistica
- Coding
- 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_idint(5) unsigned NOT NULL auto_increment,
organizzatore_idint(3) NOT NULL,
eventotext NOT NULL,
luogotext NOT NULL,
giornoint(2) NOT NULL default '',
meseint(2) NOT NULL default '',
annoint(4) NOT NULL default '',
oraint (4) NOT NULL default '',
oraportetime NOT NULL,
descrizionetext NOT NULL,
bigliettiint(3),
disponibilitaint(3),
prezzodecimal (5,2),
comunicazionitext NOT NULL,
autorevarchar(50) NOT NULL default '',
datatimestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
fotovarchar(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)
)CREATE TABLE
ordini(
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)
)CREATE TABLE
organizzatori(
organizzatore_idint(3) NOT NULL auto_increment,
usernamepromotervarchar(30) NOT NULL default '',
passwordvarchar(34) NOT NULL,
confermapasswordvarchar(34) NOT NULL,
organizzazionevarchar(30) NOT NULL default '',
partitaivavarchar(30) NOT NULL default '',
codicefiscalevarchar(30) 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 (organizzatore_id),
UNIQUE KEYid(organizzatore_id),
KEYid_2(organizzatore_id)
)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)
)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ì: