Relazione tra tabelle

  • Creatore Discussione Creatore Discussione wizard86
  • Data di inizio Data di inizio

wizard86

Utente Attivo
3 Ago 2009
31
0
0
Salve a tutti sto incontrando delle serie difficoltà a mettere in relazione le seguenti tabelle!!!

tabelle.png
 

Allegati

  • tabelle.png
    tabelle.png
    33,2 KB · Visite: 386
Se per ogni privato e per ogni azienda deve esserci un login corrispondente, allora io aggiungerei un campo ID_LOGIN in entrambe le tabelle (PRIVATI e AZIENDE) che sia relazionato al campo ID_LOGIN della tabella LOGIN. Per il resto mi sembra che il database sia apposto, e ti faccio i complimenti per come lo hai costruito. Non è semplice progettare uno schema del genere senza fare pastrocchi.
 
Grazie mille per i complimenti!!! devo farti ancora una domanda però, come faccio poi con php ad estrarmi i dati dalla giusta tabella?

Avevo pensato ad una cosa simile ma sbaglio da qualche parte nel ragionamento!!!

Questa è la query che faccio al login

PHP:
$query  = "SELECT id_login FROM LOGIN WHERE email = '$email' AND password = MD5('$password')";

Poi mi creo la sessione così

PHP:
session_start();
$_SESSION['user_id'] = $record['id'];
header("location: mod-ordini.php");
exit();

e poi al momento in cui mi devo richiamare l'anagrafica dalla giusta tabella però...

PHP:
$query  = "SELECT nome,cognome,indirizzo,cap,citta,provincia,telefono,email FROM privati WHERE id = '".$_SESSION['user_id']."'";

Ma come faccio a capire se l'utente è un privato o un azienda e fargli fare la query giusta???
 
Puoi fare così:
PHP:
$sql = "SELECT c.nome_categoria AS categoria, l.id_categoria FROM categorie AS c, login AS l WHERE l.id_login = {$_SESSION['user_id']} AND c.id_categoria = l.id_categoria";
Prova a vedere che cosa ti restituisce come risultato.
 
Scusa ma continuo a non capire...

c.nome_categoria
l.id_categoria

Cosa sono, da dove saltano fuori?

E poi un'altra cosa, ho appena scoperto che il mio hosting non ha attivo il motore InnoDB... è un problema vero?
 
nome_categoria è il nome di un campo nella tabella categorie, id_categoria è il nome di un campo nella tabella login. Per selezionare dei campi di tabelle diverse bisogna farle precedere dal nome della tabella, ad esempio: categorie.nome_categoria e login.id_categoria. Per evitare di costruire query chilometriche si può assegnare un alias alla tabella. Nel nostro caso c per la tabella categorie e l per la tabella login. Da qui derivano c.nome_categoria (il campo nome_categoria della tabella categorie) e l.id_categoria (il campo id_categoria della tabella login).
 
Capito (ottima speigazione!!!).
Però forse mi sono spiegato male io...

A me non interessa estrarre il nome della categoria di appartenenza dalla tabella Categorie, invece, mi interessa riconosce la tipologia di utente e andare a fare la query per l'estrazione dell'anagrafica nella giusta tabella di appartenenza!

Esempio:
L'utente [email protected] effettua l'accesso.
PHP:
$query  = "SELECT id_login FROM LOGIN WHERE email = '$email' AND password = MD5('$password')";

metto in sessione l'id e mando l'utente alla pagina di ordine dove fa tutto quello che deve...
PHP:
session_start();
$_SESSION['user_id'] = $record['id']; 
header("location: mod-ordini.php");
exit();

a questo punto quando l'utente ha finito di ordinare la sua merce viene rimandato ad una pagina dove dovrebbe trovare tutto quello che ha ordinato + i suoi dati anagrafici.

Il dubbio ora sta qua, come strutturo la query di estrazione dell'anagrafica?
da quel che so l'utente potrebbe appartenere ad una delle 2 categorie
 
Beh, una volta che hai ottenuto il nome della categoria a cui appartiene (potrebbe andare bene anche l'ID) non ti resta che estrarre i dati di quell'utente dalla relativa tabella (se il nome è Privati li estrai dalla tabella dei privati, altrimenti da quella delle aziende). Non vedo dov'è il problema...
 
Scusa se ti faccio impazzire, facciamo un passo indietro alla tua query

PHP:
$sql = "SELECT c.nome_categoria AS categoria, l.id_categoria FROM categorie AS c, login AS l WHERE l.id_login = {$_SESSION['user_id']} AND c.id_categoria = l.id_categoria";

Ho pensato che potrei utilizzarla nella mia pagina di resoconto per estrarmi i valori dalla giusta tabella di riferimento, mi spiego meglio:
Se usando la query che mi hai suggerito tu associo all'id della categoria di appartenenza il nome della categoria, posso usare proprio quest'ultimo (che avrà come valore o Privati o Aziende) per selezionare l'anagrafica dalla giusta tabella, qualcosa simile a quello che ho scritto sotto

PHP:
$queryctg = "SELECT c.nome_categoria AS categoria, l.id_categoria FROM categorie AS c, login AS l WHERE l.id_login = {$_SESSION['user_id']} AND c.id_categoria = l.id_categoria";
			$resultctg = mysql_query($queryctg);
			  	
			if (!$resultctg) {
					die("Errore nella query $query: " . mysql_error());
				}
			  	
			$recordctg = mysql_fetch_array($resultctg);
			
			// preparo ed invio la query
			$query  = "SELECT * FROM {$_SESSION['nome_categoria']} WHERE id = {$_SESSION['user_id']}";
			$result = mysql_query($query);

			$result = mysql_query($query);
			if (!$result) {
				echo ("<h2>Errore</h2> ,".mysql_error());
				echo ("Riprova...<br />\n");
			}
			else {
				while ($row = mysql_fetch_row($result)) {

Solo che mi restituisce questo...

Errore nella query : Table 'Sql382944_5.categorie' doesn't exist

Queste sono le tabelle interessate con i nomi e i campi

Categorie
id_categoria
nome_categoria

Login
id
id_categoria
email
password
 
Se ho capito bene come funziona la costruzione di questo tipo di select ho modificato la tua in questo modo

PHP:
$queryctg = "SELECT c.id_categoria, l.id_categoria FROM Categorie AS c, Login AS l
		WHERE l.id = {$_SESSION['user_id']} AND c.id_categoria = l.id_categoria";

solo che adesso mi da questo errore

,You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE id = 1' at line 1Riprova...
Warning: mysql_free_result() expects parameter 1 to be resource, boolean given in /web/htdocs/www.nuccio.it/home/sessione/resoconto.php on line 141
 
Sei sicuro che la query sia quella? Dall'errore che restituisce MySQL sembra che tu abbia scritto:
PHP:
$queryctg = "SELECT c.id_categoria, l.id_categoria FROM Categorie AS c, Login AS l 
        WHERE id = {$_SESSION['user_id']} AND c.id_categoria = l.id_categoria";
 
Sei sicuro che la query sia quella? Dall'errore che restituisce MySQL sembra che tu abbia scritto:
PHP:
$queryctg = "SELECT c.id_categoria, l.id_categoria FROM Categorie AS c, Login AS l 
        WHERE id = {$_SESSION['user_id']} AND c.id_categoria = l.id_categoria";

Che significa? quella che hai appena postato è esattamente quella che sto utilizzando al momento!

Quella che in origine avevi postato tu rimandava questo errore Errore nella query : Table 'Sql382944_5.categorie' doesn't exist
 

Discussioni simili