Newsgroup: it.comp.www.php
Titolo: Problema con tabelle e database

Salve a tutti, sono nuovo nel NG e son già qui a scocciarvi :)
Ho un problema che forse è più inerente a MySQL che a PHP in se..
Ho un composto da due tabelle, tab1 e tab2.
La tab1 contiene delle anagrafiche e come chiave un ID (auto increment)
La tab2 contiene altre voci che dovrebbero fare riferimento all'ID della 
tab1
Vorrei sapere come devo fare per creare una correlazione fra le due tabelle, 
in modo che se io inserisco una nuova anagrafica nella tab1, nella tab2 
venga inserita una riga vuota contenente lo stesso numero nel campo ID.
Ho provato ad usare reference ed una foreign key sulla tab2, ma non ottengo 
l'effetto desiderato.
Devo utilizzare il vincolo cascade o esistono altri modi ?
Mi scuso per la prolissità e ringrazio chiunque perda del tempo per 
rispondermi.
Di seguito riporto l'sql di creazione delle due tabelle:
SQL query:
CREATE TABLE `anagrafica` (
`id` INT( 10 ) NOT NULL AUTO_INCREMENT ,
`ragionesociale` VARCHAR( 255 ) ,
`indirizzo` VARCHAR( 255 ) ,
`cap` VARCHAR( 5 ) ,
`comune` VARCHAR( 255 ) ,
`provincia` VARCHAR( 2 ) ,
`telefono` VARCHAR( 15 ) ,
`piva` VARCHAR( 15 ) ,
PRIMARY KEY ( `id` )
) TYPE = MYISAM ;
# Struttura della tabella `esiti`
CREATE TABLE `esiti` (
`id` INT( 10 ) REFERENCES anagrafica( id ) ,
`data` DATE,
`ora` TIME,
`esito` INT( 2 ) ,
`note` VARCHAR( 255 ) NOT NULL ,
PRIMARY KEY ( `id` )
) TYPE = MYISAM
-- 
 oooO                                  Oooo
 (    )                YUS              (    )
  \   (      Para todos, todo,      )   /
   \_ )    nada para nosotros.  ( _/ 

 nel campo ID.
Sei OT, it.comp.software.database
-- 
I am what I am, I do what I can
Sei un newbie? Leggi questo 
http://url.repository.biz/go/3C
Vuoi supportarmi? 
http://url.repository.biz/go/3E
Do. Or do not. There is not try.

 
Devi fare due INSERT distinte.
Sei OT qui, spostati su i.c.s.database.
Alla prossima.
	MAX

 campo ID.
Che io sappia, MySQL non gestisce ancora l'integrità referenziale.
Quindi è inutile impostare foreign key.
E poi quello che vuoi fare tu, non sarebbe "automatico". Devi farlo a mano.
Inserisci un record in tab1 e recuperi il valore di ID generato da MySQL 
mediante la funzione mysql_insert_id().
Poi inserisci il record in tab2.
Ciao
Marco 


Si, è quello ke alla fine ho fatto, molte grazie.


 mediante la funzione mysql_insert_id().
manca un campo sulla tabella 2
CREATE TABLE `anagrafica` (
`id_an` INT( 10 ) NOT NULL AUTO_INCREMENT ,
`ragionesociale` VARCHAR( 255 ) ,
`indirizzo` VARCHAR( 255 ) ,
`cap` VARCHAR( 5 ) ,
`comune` VARCHAR( 255 ) ,
`provincia` VARCHAR( 2 ) ,
`telefono` VARCHAR( 15 ) ,
`piva` VARCHAR( 15 ) ,
PRIMARY KEY ( `id` )
) TYPE = MYISAM ;
# Struttura della tabella `esiti`
CREATE TABLE `esiti` (
'id_es' INT(10) NOT NULL AUTO_INCREMENT,
`es_an` INT( 10 ) NOT NULL REFERENCES anagrafica( id ) ,
`data` DATE,
`ora` TIME,
`esito` INT( 2 ) ,
`note` VARCHAR( 255 ) NOT NULL ,
PRIMARY KEY ( `id` )
) TYPE = MYISAM
caso 1:
inserisco il nome e cognome ....
fine
inserisco il giorno dopo (per dire) l'esito
caso 2
inserisco nome cognome ed esito
_devi_ aprire una transazione (sono 4 righe in piu)
la FK dovrebbe essere
on delete (ma non lo fa restrict)
on update cascode (funziona)
on delete cascode se e'elimini lo user cancelli ache gli esiti senza fare un
tubo


 
A me risulta che InnoDB riconosca i vincoli di integrità referenziale,
ma che non ci faccia niente di concreto. I vincoli ci sono, ma non se ne
occupa lui di aggiornare le tabelle. Poi magari mi sbaglio, ma io ho
letto questo sulla documentazione. Ti prego di contraddirmi con un link
a lettura approfondita sull'argomento, se mi sbaglio!
-- 
Stéphane Bisinger
Webmas... well...