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.
$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.
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!
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
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";
No, in quella che ho postato è presente solo id invece di l.id. E poi il campo non si chiamava id_login? Almeno dallo schema che hai postato sembra così...