Relazione uno a molti

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

Max61

Utente Attivo
2 Mar 2014
760
4
18
Buongiorno, vorrei relazionare queste 3 tabelle tblanagrafica, tblsinistri, tblverbali con codice php, per adesso riesco a farle dialogare soltanto inserendo a mano i dati tramiate mysql e non è sufficiente.
Le tabelle tblsinistri e tblverbali possono avere più record collegati alla tabella con record univoci tblanagrafica.
Allego codice delle tre tabelle:
tblanagrafica
PHP:
-- phpMyAdmin SQL Dump
-- version 4.0.9
-- http://www.phpmyadmin.net
--
-- Host: 127.0.0.1
-- Generato il: Nov 10, 2015 alle 11:42
-- Versione del server: 5.6.14
-- Versione PHP: 5.5.6

SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";


/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;

--
-- Database: `gestionesinistri`
--

-- --------------------------------------------------------

--
-- Struttura della tabella `tblanagrafica`
--

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`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=8 ;

--
-- Dump dei dati per la tabella `tblanagrafica`
--

INSERT INTO `tblanagrafica` (`id`, `Nominativo`, `Residenza`, `Indirizzo`, `Cellulare`, `TelefonoFisso`, `Mail`) VALUES
(6, 'pippo', 'Alberese', 'alberese', '333', '0564', 'mauil'),
(7, 'pippo', 'ABBADIA CERRETO', 'alberese', '333', '0564', 'mail');

/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;

tblsinistri
PHP:
-- phpMyAdmin SQL Dump
-- version 4.0.9
-- http://www.phpmyadmin.net
--
-- Host: 127.0.0.1
-- Generato il: Nov 10, 2015 alle 11:42
-- Versione del server: 5.6.14
-- Versione PHP: 5.5.6

SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";


/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;

--
-- Database: `gestionesinistri`
--

-- --------------------------------------------------------

--
-- Struttura della tabella `tblsinistri`
--

CREATE TABLE IF NOT EXISTS `tblsinistri` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `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(10) 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`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

--
-- Limiti per le tabelle scaricate
--

--
-- Limiti per la tabella `tblsinistri`
--
ALTER TABLE `tblsinistri`
  ADD CONSTRAINT `tblsinistri_ibfk_1` FOREIGN KEY (`tblanagrafica_id`) REFERENCES `tblanagrafica` (`id`) ON DELETE CASCADE;

/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;

tblverbali
PHP:
-- phpMyAdmin SQL Dump
-- version 4.0.9
-- http://www.phpmyadmin.net
--
-- Host: 127.0.0.1
-- Generato il: Nov 10, 2015 alle 11:43
-- Versione del server: 5.6.14
-- Versione PHP: 5.5.6

SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";


/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;

--
-- Database: `gestionesinistri`
--

-- --------------------------------------------------------

--
-- Struttura della tabella `tblverbali`
--

CREATE TABLE IF NOT EXISTS `tblverbali` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `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,
  `Verbale` text NOT NULL,
  PRIMARY KEY (`id`),
  KEY `par_ind` (`tblanagrafica_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

--
-- Limiti per le tabelle scaricate
--

--
-- Limiti per la tabella `tblverbali`
--
ALTER TABLE `tblverbali`
  ADD CONSTRAINT `tblverbali_ibfk_1` FOREIGN KEY (`tblanagrafica_id`) REFERENCES `tblanagrafica` (`id`) ON DELETE CASCADE;

/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;

Grazie per l'aiuto
Max61
 
Crea una quarta tabella di relazioni e le colleghi tramide id.

Con un piccolo ciclo in php potresti relazionare anche più id della stessa tabella
 
Crea una quarta tabella di relazioni e le colleghi tramide id.

Con un piccolo ciclo in php potresti relazionare anche più id della stessa tabella


Scusami ma è da poco che uso php e sopratutto è la prima volta che uso le relazioni tra tabelle.
Se hai tempo per farmi vedere come si fa...
Grazie
Max61
 
Sia SQL che PHP?

Usi MySQL o MySQLi?
Che versione di PHP hai installato?
 
Sia SQL che PHP?

Usi MySQL o MySQLi?
Che versione di PHP hai installato?


L'ho copiato da phpMyAdmin
Server del Database

Server: 127.0.0.1 via TCP/IP
Tipo di server: MySQL
Versione del server: 5.6.14 - MySQL Community Server (GPL)
Versione protocollo: 10
Utente: root@localhost
Codifica caratteri del server: UTF-8 Unicode (utf8)
 
Allora per prima cosa ci costruiamo la tabella delle relazioni

Codice:
codice MySQL


CREATE TABLE `gestionesinistri`.`tbl_relazioni` ( `id` INT NOT NULL AUTO_INCREMENT , `id_anagrafica` INT NOT NULL , `id_sinistri` INT NOT NULL , `id_verbali` INT NOT NULL , PRIMARY KEY (`id`)) ENGINE = InnoDB;

poi dipende da come hai strutturato la ricerca, ricerchi per anagrafica? per sinistro? oppure hai utenze...

così quando vuoi ricercare per esempio tutti i sinistri di un cliente, selezionando l'id utente e rapportandolo nella colonna id_anagrafica puoi estrarre tutti i sinistri correlati.
 
Allora per prima cosa ci costruiamo la tabella delle relazioni

Codice:
codice MySQL


CREATE TABLE `gestionesinistri`.`tbl_relazioni` ( `id` INT NOT NULL AUTO_INCREMENT , `id_anagrafica` INT NOT NULL , `id_sinistri` INT NOT NULL , `id_verbali` INT NOT NULL , PRIMARY KEY (`id`)) ENGINE = InnoDB;

poi dipende da come hai strutturato la ricerca, ricerchi per anagrafica? per sinistro? oppure hai utenze...

così quando vuoi ricercare per esempio tutti i sinistri di un cliente, selezionando l'id utente e rapportandolo nella colonna id_anagrafica puoi estrarre tutti i sinistri correlati.

Grazie, ho creato la tabella delle relazioni, la ricerca ancora non l'ho fatta perchè mi sono arenato sulle relazioni, però come ricerca pensavo di utilizzare il campo 'Nominativo' e il campo 'Num_Pratica', perchè con le tabelle collegate immagino che una volta trovato il numero di pratica o il nominativo trovo di conseguenza anche gli altri dati.
Almeno credo che sia così.

Detto ciò cosa devo fare adesso per collegare le relazioni?
Scusami ancora per l'ignoranza in materia

Ciao
Max61
 
in php si complica.
In update oltre a popolare le varie tabelle dovrai scriverti id da inserire nella tabella delle relazioni.
Per quanto mi riguarda preferisco fare più query che fare un INNER.
Quindi quando ti costruirai la pagina di inserimento farai un INSERT INTO per la tabella tblsinistri e uno per tblverbali.

Una modifica da fare è questa

Codice:
CODICE MySQL

ALTER TABLE `tbl_relazioni` ADD `Num_Pratica` INT NOT NULL AFTER `id`;
Così puoi evitare di inserirlo nelle altre tabelle e costruisci il database pratica centrico.

a questo punto se cerchi per utente la query sarà

Codice:
Query SQL

SELECT * FROM `tab_relazioni` WHERE `id_anagrafica` = '$cliente'

dove $cliente sarà l'id della tabella tblanagrafica
 
Ho provato e ti allego il codice INSERT nella tabella tblsinistri
PHP:
$queryTblRelazioni = mysql_query "ALTER TABLE `tbl_relazioni` ADD `Num_Pratica` INT NOT NULL AFTER `id`"; 
 // invio la query
   $resultTblRelazioni = mysql_query($queryTblRelazioni);
   
	$query = "INSERT INTO tblsinistri (LocalitaSinistro, AnnoSinistro, Num_Pratica, DataSinistro, Data_Richiesta_Utente, Num_Protocollo_Arrivo)
			VALUES ('$LocalitaSinistro', '$AnnoSinistro', '$Num_Pratica', '$DataSinistro', '$Data_Richiesta_Utente', '$Num_Protocollo_Arrivo')";

   // invio la query
   $result = mysql_query($query);

MI da questo errore, sicuramente non ho capito bene il da farsi
Parse error: syntax error, unexpected '"ALTER TABLE `tbl_relazioni` A' (T_CONSTANT_ENCAPSED_STRING) in C:\xampp\htdocs\GestioneSinistri\views\InserisciSinistro.php on line 38

Grazie ancore per la pazienza, ma mi sembra veramente difficile

Max61
 
Si scusa mea culpa!

ALTER TABLE lo fai da phpmyadmin nella sezione SQL!

però controlla che non l'abbia già fatta la query?!?
 
Devi vedere semplicemente se in struttura ti ha aggiunto il campo Num_Pratica
 
Funziona, Ha aggiunto il campo Num_Pratica, ma il codice php per lanciare questa query?
Scusami ma sono proprio una schiappa, mi sono voluto cimentare in una cosa più grande delle mie conoscenze.
Questo programma io l'ho già fatto con Access nel pc in locale, mi sarebbe piaciuto farlo in PHP e metterlo sul server...ma la vedo dura.
Ciao
Max61
 
Cercherò di aiutarti il più possibile, ma se lo fai a scopo didattico vorrei farti arrivare alla soluzione senza imbeccarti troppo.

allora a questo punto abbiamo il database quasi finito.
Passiamo al codice php.

Domanda il tuo sistema prevede utenze e permessi?
 
Ciao, utilizzo nome Utente e password, per entrare nel menu principale, non so e ti riferisci a questo quando chiedi "utenze e permessi?".
Faccio questo programma per essere utilizzato al posto di quello fatto con Access.

Cerco di evolvermi, in quanto mi piace fare i programmi anche se le mie conoscenze sono minime e autodidatta.
Grazie per la pazienza
Max61
 
Ciao Max61,
se ho capito bene il tuo problema, devi mettere in relazione tre tabelle.
A mio avviso non occorre creare una quarta tabella (con conseguente spreco di risorse). Secondo me basta creare nella tabella anagrafica (come hai già fatto) un campo ID autoincrementante, e un campo (oltre all'ID) ID_UTENTE nelle altre due tabelle. In questo modo, quando inserirai un nuovo utente, il programma ne controllerà l'esistenza prima nella tabella anagrafica e, se lo trova legge e memorizza l'ID in una variabile che andrà poi a scrivere nel campo ID_UTENTE delle altre due tabelle, se invece non lo trova inserirà un nuovo record (con un nuovo ID) nella tabella anagrafica e, come prima, memorizzerà l'ID in una variabile che poi registrerai nelle altre due tabelle.
In questo modo ad ogni ID della tabella anagrafica corrisponderanno uno o più ID_UTENTE nelle altre due.


Zorro:byebye::byebye:
 
Ciao Zorro, quel campo che te chiami ID_UTENTE io l'ho creato sia nella tabella tblsinistri che tblverbali con il nome di tblanagrafica_id, il problema è che non so metterle in relazione tra loro, come hai spiegato tu. Mi ci vuole un esempio da cui partire, perchè adesso se inserisco un record nella tabella tblanagrafica sia nella tabella tblsinistri che tblverbali non viene inserito nulla, sono tabelle a se. Non so da dove cominciare.

Ti posto la mia attuale query di insert:
PHP:
<?php
     // connessione al database
	include('Connessione.php');

	 $db= 'tblanagrafica';
		
     $db = mysql_connect($host, $user, $password) or die ("Impossibile connettersi al server");
	 echo " ";
		
     mysql_select_db($database, $db) or die ("impossibile connettersi al database");
	 echo " ";
	
	$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')";

   // invio la query
   $result = mysql_query($query);

   // controllo l'esito
   if (!$result) {
				die("<span style=\"color:red: font-size: 20pt\"Errore nell'inserimento. Riprova...</span>" . mysql_error());
   }
   echo "<span style=\"color: yellow; font-size: 24pt\"><strong><i>Calcolo inserito correttamente. </span>";

?>
Ciao
Max61
 
Ultima modifica:
Ciao, utilizzo nome Utente e password, per entrare nel menu principale, non so e ti riferisci a questo quando chiedi "utenze e permessi?".
Faccio questo programma per essere utilizzato al posto di quello fatto con Access.

Cerco di evolvermi, in quanto mi piace fare i programmi anche se le mie conoscenze sono minime e autodidatta.
Grazie per la pazienza
Max61

Bene quindi vorrai sapere anche chi ha inserito quella pratica o meglio chi è l'owner di tutto l'iter!

Se si dovrai aggiungere un campo alla tabella delle relazioni. Il campo chiamalo come vuoi.

Perdonami quindi su questo database potrebbero lavoraci più di una persona contemporaneamente?
 

Discussioni simili