Relazione tra tabelle

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: 364

alessandro1997

Utente Attivo
6 Ott 2009
5.302
1
0
26
Roma
alessandro1997.netsons.org
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.
 

wizard86

Utente Attivo
3 Ago 2009
31
0
0
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???
 

alessandro1997

Utente Attivo
6 Ott 2009
5.302
1
0
26
Roma
alessandro1997.netsons.org
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.
 

wizard86

Utente Attivo
3 Ago 2009
31
0
0
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?
 

alessandro1997

Utente Attivo
6 Ott 2009
5.302
1
0
26
Roma
alessandro1997.netsons.org
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).
 

wizard86

Utente Attivo
3 Ago 2009
31
0
0
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
 

alessandro1997

Utente Attivo
6 Ott 2009
5.302
1
0
26
Roma
alessandro1997.netsons.org
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...
 

wizard86

Utente Attivo
3 Ago 2009
31
0
0
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
 

wizard86

Utente Attivo
3 Ago 2009
31
0
0
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
 

alessandro1997

Utente Attivo
6 Ott 2009
5.302
1
0
26
Roma
alessandro1997.netsons.org
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";
 

wizard86

Utente Attivo
3 Ago 2009
31
0
0
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
Autore Titolo Forum Risposte Data
R Relazione tra tabelle MS Access 5
D relazione tra 2 tabelle (datiutenti e slide) PHP 1
B Problema relazione tra due tabelle Database 0
M [MS Access] Relazione tra maschere MS Access 1
C relazione tra swf e finestra internet Flash 0
S Consiglio si relazione tabelle MS Access 1
E Info relazione tabelle MySQL 17
D Laravel8 relazione molti a molti Programmazione 2
V [PHP] Relazione molti a molti PHP 2
T [PHP] Relazione uno a uno PHP 1
M registrazione in relazione ai commenti Programmazione 0
T Domanda su Schema e Relazione Database 0
felino [MySQL] "Sicronizzare" due tabelle tramite il campo di relazione MySQL 0
M Creare stampe pdf con tabelle relazione uno a molti PHP 0
M Relazione uno a molti PHP 59
M Problema relazione uno a molti con 3 tabelle MySQL 4
F Gestione portfolio / categorie con relazione molti a molti MySQL 7
M relazione ricorsiva Database 0
F record accodati non in relazione MS Access 3
E ACCESS-il capo interessato in relazione non si autocompila! MS Access 0
M query su relazione molti a molti MS Access 1
A Parametro visibility hidden in relazione a window.screen.width Javascript 10
neo996sps cancellare i dati se non sono in relazione PHP 5
mythar SQL Server non accetta la relazione Database 1
D Filemaker: aiuto per una relazione Database 2
E Query differenza tra tabelle MySQL 5
A differenza tra account email e ISP presenti in blacklist Posta Elettronica 0
W Differenza tra orari PHP 3
Z Google Fonts CSS tra desktop e responsive HTML e CSS 1
MarcoGrazia Associazioni tra Search Console e Analitycs SEO e Posizionamento 0
M Collegamento tra form html e script php PHP 4
D popolare campi tra th alla select PHP 36
Gabriele Visioli Differenza tra hosting e hosting WordPress Hosting 4
S Differenza tra le funzioni include () e require ()? PHP 1
P Ciclare tra array di oggetti PHP 1
B Incongruenze tra Mac ver e PC ver Photoshop 1
N Problema passaggio variabili tra pagine PHP 4
L estrarre valori max tra più tabelle MySQL 2
MarcoGrazia Dati nulli su join tra più tabelle MySQL 1
S Utilizzo variabili di sessione tra PC e server PHP 0
Tommy03 Query tra 3 tabelle MySQL 2
elpirata [MySQL] Sincronizzare dati tra due tabelle sullo stesso host MySQL 0
R passaggio variabili tra modulo genitore a figlio jQuery 3
P Passagio dati complessi tra una ASP.NET webapi e Angular ASP.NET 1
A [ASP] Confronto tra dati Form e DB Classic ASP 2
G [PHP] Passare dati tra record PHP 4
T onsiglio Web agency tra Caserta Agro Aversano e Napoli e zone vicine. Offerte e Richieste di Lavoro e/o Collaborazione 0
D Jquery, conflitto tra loro risolvibile? jQuery 7
J Passaggio variabile tra 2 file php PHP 15
E Compro profilo Instagram tra 10k e 30k Annunci servizi di Social Media Marketing 2

Discussioni simili