Collegare 3 tabelle

  • Creatore Discussione Creatore Discussione Max61
  • Data di inizio Data di inizio

Max61

Utente Attivo
2 Mar 2014
760
4
18
Salve, devo collegare 3 tabelle tra di loro, ho usato INNER JOIN e così riesco a collegare i dati dell'anagrafica con i la tabella sinistri e la tabella verbali. Questo collegamento l'ho fatto manualmente, mi spiego meglio: nella tabella anagrafica ho aggiunto il campo id_sinistri e id_verbali, così ho fatto anche nelle altre 2 tabelle e con la query sotto riesco a leggere i dati corrispondenti.

PHP:
$query = "SELECT tblanagrafica.Nominativo, tblsinistri.Num_Pratica, tblverbali.DecisioneGil, tblverbali.NoteVerbale, tblverbali.StatoPratica
 FROM tblanagrafica INNER JOIN tblsinistri ON tblanagrafica.idanagrafica = tblsinistri.idsinistro
 INNER JOIN tblverbali ON tblverbali.idverbale =  tblsinistri.idsinistro WHERE tblanagrafica.idanagrafica = '$idanagrafica'";

I valori dei campi id li ho scritti manualmente, direttamente in tabella, ma così non ha senso!!!

Non riesco a capire come posso collegare le 3 tabelle nella fase di insert, infatti inserisco per primo nella tabella anagrafica e successivamente nella tabella sinistri, infine a distanza di settimane devo inserire il collegamento dell'anagrafica e del sinistro nella tabella verbali.

Con la speranza di essermi spiegato...
Vi chiedo gentilmente aiuto

Grazie
Max61
 
il nominativo (anagrafica) potrebbe avere più sinistri, ciascuno con il suo verbale/i

il collegamento migliore mi sembra quello che inserisce,
l'id dell'anagrafica nella tabella sinistri e nella tabella verbali
ma al contempo nella tabella verbali andrebbe inserito anche "Num_Pratica"

le informazioni sono tutte presenti al momento dell'inserimento ed
in questo modo è possibile fare diverse ricerche
ciao
Marino
 
il nominativo (anagrafica) potrebbe avere più sinistri, ciascuno con il suo verbale/i

il collegamento migliore mi sembra quello che inserisce,
l'id dell'anagrafica nella tabella sinistri e nella tabella verbali
ma al contempo nella tabella verbali andrebbe inserito anche "Num_Pratica"

le informazioni sono tutte presenti al momento dell'inserimento ed
in questo modo è possibile fare diverse ricerche
ciao
Marino


Buongiorno,
è da poco che mi cimento con php e questa è la prima volta che provo a fare una relazione uno a molti, vediamo se ho capito: io nell'insert della form anagrafica che posto
FORM ANAGRAFICA
PHP:
        $Nominativo = $_POST['Nominativo'];
	$Residenza = $_POST['Residenza'];
	$Indirizzo = $_POST['Indirizzo'];
	$Cellulare = $_POST['Cellulare'];
	$TelefonoFisso = $_POST['TelefonoFisso'];
	$Mail = $_POST['Mail'];		
	
        $query = "INSERT INTO tblanagrafica (Nominativo, Residenza, Indirizzo, Cellulare, TelefonoFisso, Mail)
			VALUES ('$Nominativo', '$Residenza', '$Indirizzo', '$Cellulare', '$TelefonoFisso', '$Mail')";
ci dovrei aggiungere il campo idanagrafica e Num_pratica nel post dell'insert che allego sotto?
Scusami ma sono ignorante in materia.

FORM SINISTRI
PHP:
        $LocalitaSinistro = $_POST['LocalitaSinistro'];
	$AnnoSinistro = $_POST['AnnoSinistro'];
	$Num_Pratica = $_POST['Num_Pratica'];
	$Data_Richiesta_Utente = $_POST['Data_Richiesta_Utente'];
	$DataPresentatazionePratica = $_POST['DataPresentatazionePratica'];
		
	$query = "INSERT INTO tblsinistri (LocalitaSinistro, AnnoSinistro, Num_Pratica, Data_Richiesta_Utente, 
                      DataPresentatazionePratica)                       
			VALUES ('$LocalitaSinistro', '$AnnoSinistro', '$Num_Pratica', '$Data_Richiesta_Utente', 
                       '$DataPresentatazionePratica')";

Grazie
Max61
 
no, non stiamo parlando di form, dove le informazioni sono già presenti, ovvero

quando inserisci un sinistro, dovresti già aver inserito l'anagrafica, quindi ne possiedi l'id
con il sinistro inserisci l'id precedente ed hai il numero della pratica
e in seguito quando inserirai il verbale dovrai aggiungere entrambe le info

quindi riepilogando, più che i form, devi guardare le tabelle del database
la tabella sinistri deve contenere il legame con la tabella anagrafica
la tabella verbali deve contenere il legame con l'anagrafica ed il relativo sinistro

se vuoi posta le 3 tabelle
ciao
Marino
 
Esatto le fasi sono queste:
1-inserimento nella tabella anagrafica
2-inserimento nella tabella sinistri
3-inserimento nella tabella verbali

le prime due fasi avvengano quasi simultaneamente, mentre la terza può avvenire a giorni di distanza.
provo a inviarti le 3 tabelle zippate

Grazie
Max61
 

Allegati

ti suggerirei la struttura sottostante che rappresenta
1 anagrafica a fronte di più (possibili) sinistri con relativo verbale (ma anch'essi potrebbero essere più)
ovvero per un secondo sinistro si può (deve) usare la stessa anagrafica e via di seguito

in questo modo quando si inserisce il sinistro, si ha già l'id dell'anagrafica
e quando si dovrà inserire un verbale, verrà fatta la ricerca anagrafica/sinistro,
i loro id andranno inseriti con il verbale stesso
ciao
Marino

ps prima di eliminare le righe dall'anagrafica, è bene trasferire con una query(update) i gli id nelle rispettive tabelle

Codice:
CREATE TABLE IF NOT EXISTS `tblanagrafica` (
  `id` int(15) NOT NULL AUTO_INCREMENT,
(eliminati i due riferimenti) <<<<<<<<<<<<<<<<<<<<
  `Nominativo` varchar(255) NOT NULL,
  `Residenza` varchar(255) NOT NULL,
  `Indirizzo` varchar(255) NOT NULL,
  `Cellulare` varchar(255) NOT NULL,
  `TelefonoFisso` varchar(255) NOT NULL,
  `Mail` varchar(255) NOT NULL,
  PRIMARY KEY (`id`)


CREATE TABLE IF NOT EXISTS `tblsinistri` (
  `id` int(11) DEFAULT NULL,
  `tblanagrafica_id` int(11) DEFAULT NULL,
.....
  PRIMARY KEY (`id`),
  KEY `par_ind` (`tblanagrafica_id`)


CREATE TABLE IF NOT EXISTS `tblverbali` (
  `id` int(11) NOT NULL DEFAULT '0',
  `tblanagrafica_id` int(11) DEFAULT NULL,

  `tblsinistri_id` int(11) DEFAULT NULL, <<<<<<<<<<<<<<<<<<

  `NoteVerbale` varchar(255) NOT NULL,
  `StatoVerbale` varchar(255) NOT NULL,
  `DecisioneGil` varchar(255) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `par_ind` (`tblanagrafica_id`, `tblsinistri_id`)
 
Cokkegare 3 tabelle

ti suggerirei la struttura sottostante che rappresenta
1 anagrafica a fronte di più (possibili) sinistri con relativo verbale (ma anch'essi potrebbero essere più)
ovvero per un secondo sinistro si può (deve) usare la stessa anagrafica e via di seguito

in questo modo quando si inserisce il sinistro, si ha già l'id dell'anagrafica
e quando si dovrà inserire un verbale, verrà fatta la ricerca anagrafica/sinistro,
i loro id andranno inseriti con il verbale stesso
ciao
Marino

ps prima di eliminare le righe dall'anagrafica, è bene trasferire con una query(update) i gli id nelle rispettive tabelle

Codice:
CREATE TABLE IF NOT EXISTS `tblanagrafica` (
  `id` int(15) NOT NULL AUTO_INCREMENT,
(eliminati i due riferimenti) <<<<<<<<<<<<<<<<<<<<
  `Nominativo` varchar(255) NOT NULL,
  `Residenza` varchar(255) NOT NULL,
  `Indirizzo` varchar(255) NOT NULL,
  `Cellulare` varchar(255) NOT NULL,
  `TelefonoFisso` varchar(255) NOT NULL,
  `Mail` varchar(255) NOT NULL,
  PRIMARY KEY (`id`)


CREATE TABLE IF NOT EXISTS `tblsinistri` (
  `id` int(11) DEFAULT NULL,
  `tblanagrafica_id` int(11) DEFAULT NULL,
.....
  PRIMARY KEY (`id`),
  KEY `par_ind` (`tblanagrafica_id`)


CREATE TABLE IF NOT EXISTS `tblverbali` (
  `id` int(11) NOT NULL DEFAULT '0',
  `tblanagrafica_id` int(11) DEFAULT NULL,

  `tblsinistri_id` int(11) DEFAULT NULL, <<<<<<<<<<<<<<<<<<

  `NoteVerbale` varchar(255) NOT NULL,
  `StatoVerbale` varchar(255) NOT NULL,
  `DecisioneGil` varchar(255) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `par_ind` (`tblanagrafica_id`, `tblsinistri_id`)




Buongiorno, ho cercato di creare le tabelle come mi hai suggerito, ma quando vado a inserirle nel database assicurazione mi da errore alla linea 12 e non riesco a risolverlo, ti posto di nuovo le tre tabelle configurate con i tuoi consigli e l'errore che mi da è questo:

#1064 - 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 'CREATE TABLE IF NOT EXISTS `tblsinistri` ( `id` int(11) DEFAULT NULL, `tbl' at line 12

Una cosa ti volevo chiedere, se ho capito a questo punto una volta sistemate le tabelle devo solo fare l'insert nella tabella anagrafica e mi crea automaticamente i rifermenti degli id collegati alle altre tabelle, giusto? Poi basta richiamare l'id della tabella anagrafica e mi trova anche l'id della tabella sinistri e di conseguenza anche l'id della tabella verbali giusto?

Una cosa non ho capito perchè devo fare l'update, nelle tabelle non ho ancora nessun dato

GRAZIE ANCORA PER LA PAZIENZA
Max61
 

Allegati

per quanto riguarda l'errore, verifica di aver scritto correttamente il nome dei campi, mi sembra che mysql segnali apici differenti
quando posti un errore, cerca di postare anche la riga o lo spezzone di codice che l'ha generato, così si può rispondere con maggior sicurezza

per avere a disposizione i valori nelle tabelle devi modificare le query insert (e forse update) aggiungendo appunto i nuovi valori

una volta che i valori sono presenti nelle tabelle, si possono eseguire delle select che permettono di ottenere situazioni diverse,
cliente/pratiche
cliente/pratica/verbale
cliente/pratiche/verbali
cliente/pratiche/senza verbale
....

se il database è ancora vuoto, non c'è nulla da copiare, ... avevi parlato di un inserimento di valori manuale e pensavo avessi ... già dato
ciao
Marino
 
per quanto riguarda l'errore, verifica di aver scritto correttamente il nome dei campi, mi sembra che mysql segnali apici differenti
quando posti un errore, cerca di postare anche la riga o lo spezzone di codice che l'ha generato, così si può rispondere con maggior sicurezza

per avere a disposizione i valori nelle tabelle devi modificare le query insert (e forse update) aggiungendo appunto i nuovi valori

una volta che i valori sono presenti nelle tabelle, si possono eseguire delle select che permettono di ottenere situazioni diverse,
cliente/pratiche
cliente/pratica/verbale
cliente/pratiche/verbali
cliente/pratiche/senza verbale
....

se il database è ancora vuoto, non c'è nulla da copiare, ... avevi parlato di un inserimento di valori manuale e pensavo avessi ... già dato
ciao
Marino


Scusami ancora per la mia ignoranza in materia, ma io non riesco a veder nessun apice sbagliato alla riga che mi segnala:
CREATE TABLE IF NOT EXISTS `tblsinistri` (

PHP:
perchè è identica in tutto alle altre

Allego il codice delle 3 tabelle, se riesci a vedere te dove è l'errore...perchè secondo me manca qualcosa alla fine del codice di ogni tabella, infatti ho fatto alcune prove e ho visto che separatamente le tabelle vengono create nel DB se aggiungo alla fine
[PHP]) 
ENGINE=InnoDB DEFAULT CHARSET=latin1;


ho provato ad aggiungerlo alla fine di tutte e 3 le tabelle, ma non funziona, funziona solo singolarmente, ripeto secondo me manca qualcosa alla fine del codice di ogni tabella.



PHP:
CREATE TABLE IF NOT EXISTS `tblanagrafica` (
  `id` int(15) NOT NULL AUTO_INCREMENT,
  `Nominativo` varchar(255) NOT NULL,
  `Residenza` varchar(255) NOT NULL,
  `Indirizzo` varchar(255) NOT NULL,
  `Cellulare` varchar(255) NOT NULL,
  `TelefonoFisso` varchar(255) NOT NULL,
  `Mail` varchar(255) NOT NULL,
  PRIMARY KEY (`id`)

 
CREATE TABLE IF NOT EXISTS `tblsinistri` (
  `id` int(11) DEFAULT NULL,
  `tblanagrafica_id` int(11) DEFAULT NULL,
  `Nominativo` varchar(255) NOT NULL,
  `LocalitaSinistro` varchar(255) NOT NULL,
  `CodiceFiscale` varchar(16) NOT NULL,
  `Cellulare` int(255) NOT NULL,
  `TelefonoFisso` int(255) NOT NULL,
  `Mail` varchar(255) NOT NULL,
  `AnnoSinistro` int(4) NOT NULL,
  `Data_Richiesta_Utente` varchar(20) NOT NULL,
  `Num_Pratica` int(20) NOT NULL,
  `DataPresentatazionePratica` varchar(20) NOT NULL,
  `Num_Protocollo_Arrivo` int(20) NOT NULL,
  `Num_Protocollo_Partenza` int(20) NOT NULL,
  `DataSinistro` varchar(20) NOT NULL,
  `OraSinistro` varchar(5) NOT NULL,
  `ViaSinistro` varchar(255) NOT NULL,
  `CausaSinistro` text NOT NULL,
  `DanniACose` text NOT NULL,
  `Lesioni` text NOT NULL,
  `Avvocato1` varchar(255) NOT NULL,
  `Avvocato2` varchar(255) NOT NULL,
  `Avvocato3` varchar(255) NOT NULL,
  `StatoPratica` int(255) NOT NULL,
  `NostroLegale` varchar(255) NOT NULL,
  `RespTecnico` varchar(255) NOT NULL,
  `RespVerdeUrbano` varchar(255) NOT NULL,
  `RespPoliziaMunicipale` varchar(255) NOT NULL,
  `RespEconomato` varchar(255) NOT NULL,
  `VerbaleNumero` int(20) NOT NULL,
  `DataVerbale` varchar(20) NOT NULL,
  `DecisioneGil` text NOT NULL,
  `AvvocatoEsterno` varchar(255) NOT NULL,
  `AvvocatoEsterno2` varchar(255) NOT NULL,
  `Perito1` varchar(255) NOT NULL,
  `Perito2` varchar(255) NOT NULL,
  `RelazioneTecnica` text NOT NULL,
  `RapportoPoliziaMunicipale` text NOT NULL,
  `IncaricatoLavoriPubblici` varchar(255) NOT NULL,
  `IncaricatoVerdeUrbano` varchar(255) NOT NULL,
  `IncaricatoInvestigazione` varchar(255) NOT NULL,
  `RespCompAssicurativa` varchar(255) NOT NULL,
  `UffAttivitaAssicurativa1` varchar(255) NOT NULL,
  `UffAttivitaAssicurativa2` varchar(255) NOT NULL,
  `RespUffAttivitaAssicurativa` varchar(255) NOT NULL,
  `NoteVerbale` varchar(255) NOT NULL,
  `ParerePositivo` varchar(255) NOT NULL,
  `ParereNegativo` varchar(255) NOT NULL,
  `ParereRinviato` varchar(255) NOT NULL,
  `ResponsabilitaTerzi` varchar(255) NOT NULL,
  `Pratica_Conclusa` varchar(255) NOT NULL,
  `PraticaItinere` varchar(255) NOT NULL,
  `IncaricatoRelazioneTecnica` varchar(255) NOT NULL,
  `RappPoliziaMunicipale` text NOT NULL,
  `UfficioAttivitaAssicurative` varchar(255) NOT NULL,
  `VerdeUrbano` varchar(255) NOT NULL,
  `FunzionarioResponsabile` varchar(255) NOT NULL,
  `Franchigia10000` int(255) NOT NULL,
  `CompagniaAssicurativa` varchar(255) NOT NULL,
  `ConsulenteCompagniaAssicurazioni` varchar(255) NOT NULL,
  `CitazioneGiudizio` varchar(255) NOT NULL,
  `SintesiSinistro` varchar(255) NOT NULL,
  `SommaLiquidata` int(255) NOT NULL,
  `Note_Componenti` text NOT NULL,
  `Verbale` text NOT NULL,
  PRIMARY KEY (`id`),
  KEY `par_ind` (`tblanagrafica_id`)



CREATE TABLE IF NOT EXISTS `tblverbali` (
  `id` int(11) NOT NULL DEFAULT '0',
  `tblanagrafica_id` int(11) DEFAULT NULL,
  `NoteVerbale` varchar(255) NOT NULL,
  `StatoVerbale` varchar(255) NOT NULL,
  `DecisioneGil` varchar(255) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `par_ind` (`tblanagrafica_id`, `tblsinistri_id`)

Grazie ancora
Max61
 

Discussioni simili