Dati nulli su join tra più tabelle

MarcoGrazia

Utente Attivo
15 Dic 2009
852
20
28
63
Udine
www.stilisticamente.com
Ardunque :D
Ho creata una semplice applicazione per l'ufficio, una rubrica telefonica su cui annotare indirizzi dei fornitori, numeri e la list degli appuntamenti.
Fino a qui semplice, ma mi sto complicando la vita relativamente a tutte le modifiche richieste dall'ufficio. ( come sempre d'altronde )
Ora la rubrica si appoggia ad un database, con più tabelle al suo interno: una per il nome delle rubriche, una per i numeri di telefono, una per gli indirizzi ed una per gli appuntamenti.
Le tabelle sono relazionate tra loro attraverso degli indici automatici, ma non hanno chiavi esterne.
Semplicemente, partendo dalla creazione di una rubrica, poi si aggiungono i numeri di telefono, quindi se si vuole e/o se si hanno i dati si inserisce anche l'indirizzo, mentre gli appuntamenti sono svincolati e quindi lasciamoli stare per ora.
Il sistema in se è CRUD ( Create, Read, Update and Delete ) e funziona.
Quello che non funziona è la ricerca dei dati, o meglio, la fase RUD è fatta partendo dai campi di un form che si riempie da solo ( tramite ajax ) con i dati presenti nel database.
In pratica si clicca su un tasto accanto al nome che si vuole modificare e si apre il form con i campi riempiti dai dati... o meglio si dovrebbe, perché qui viene il problema, un problema relativo alla query.
La query è la presente:
Codice:
SELECT i.*, r.*, n.* FROM rubriche AS r 
LEFT JOIN numeri AS n ON r.id_rub = n.id_rub
LEFT JOIN indirizzi AS i ON n.id_num = i.id_numero
WHERE n.cognome LIKE CONCAT( \'%\', :value, \'%\' ) AND ( r.privacy_rub = 0 OR r.privacy_rub = :id ); --
dove tramite delle join prendo i dati dalle altre tabelle; ora se lancio la ricerca su un cognome, di cui ho gà oltre al numero di telefono, anche l'indirizzo, non ci sono problemi.
Ma se manca il record di riferimento all'indirizzo, perché non presente, tutti i dati relativi alle tabelle, cioè id_rub, id_num, id_ind sono nulli. Anche se i primi due di fatto esistono.
Sto provando a fare delle modifiche ma non sta funzionando, tipo chiedere i dati degli indirizzi solo se id_ind > 0 ma non cambia nulla e non so come procedere.
 
E niente ho risolto!
In pratica mi è bastato modificare il nome di un ampo della tabella indirizzi.
id_rub veniva richiamato sia dalla tabella numeri che da quella indirizzi, ma se nella numeri non era un valore nullo, perché il numero di telefono era effettivamente registrato, mancando un indirizzo, questo risultava nullo alla fine.
Cambiato il nome da id_rub a id_rubrica nella tabella indirizzi la query ha funzionato.
Mi sto anche chiedendo a cosa mi serva conservare quel dato lì, dato che il riferimento per la tabella indirizzi è la tabella numeri ( rubriche, numero ed indirizzi, hanno una relazione a cascata ).
 

Discussioni simili