Newsgroup: it.comp.www.php
Titolo: delete su + tabelle con una sola query?

Devo cancellare una riga dalla tabella marche avendo il suo id univoco
id_marca e tutti i prodotti di un'altra tabella prodotti avente il campo
id_marca uguale a quello della tabella marche.
Questo perchè se l'amministratore del sito elimina una marca devo per forza
eliminare tutti i prodotti che sono ad essa collegati per evitare record
"orfani".



Puoi fare con due query... 
Delete from prodotti where id_marca="valore"
E poi una seconda query 
Delete from marche where id_marca="valore"
Magari ho detto un cazzata.. :))
NB: per evitare di perdere i record, cmq e' meglio creare delle integrita
referziali.
Maruscya.

: Devo cancellare una riga dalla tabella marche avendo il suo id univoco

un bel trigger? (sempre che il tuo database li supporti)
--
CIAO!
Gusher

> un bel trigger? (sempre che il tuo database li supporti)
uso mysql

 ha scritto nel messaggio
news:ahok4a$r05$1...@localhost.localdomain...

Che base dati usi ? se usi un server SQL (Interbase, MySql, etc.) basta che
setti l'integrità referenziale sui campi. Sulla tabella "figlio" dovresti
crearti una cosa del tipo :
ALTER TABLE tabella_figlio ADD FOREIGN KEY (id_marca) REFERENCES
tabella_madre (id_marca) ON DELETE CASCADE;
In questo modo setti la relazione tra madre e figlio (non è un incesto) ed
aggiungi che quando viene effettuata una cancellazione alla "madre" i record
ad essa collegati per chiave esterna devono essere cancellati...
Ciao,
--
RaSca
http://web.tiscalinet.it/rascasoft

 referziali.
non so se mysql lo supporta, ma credo prorpio di no



??? Davvero ????
Ho risposto pendando al fatto che io uso interbase  ... :)
Tra l'altro avevo mezza intenzione di provare Mysql , ma l'integrita
referenziale per me e' molto importante e se non c'e'...
Mi sa che rimango con IB... 
Maruscya

 un bel trigger? (sempre che il tuo database li supporti)
Non ho mai usato un trigger.... come funziona ?!?!?
Maruscya..

 ad essa collegati per chiave esterna devono essere cancellati...
Sicuro che con mysql funziona?

 Sicuro che con mysql funziona?
Provare no eh  ;) ? Quello che ho scritto quì sopra funziona perfettamente
sotto FireBird e Interbase, ma non vedo perche non dovrebbe funzionare sotto
MySql...
--
RaSca
ib_class, una classe php per la connessione a FireBird/Interbase
http://web.tiscalinet.it/rascasoft

 ha scritto nel messaggio
news:pan.2002.07.25.14...@xpedite.it...

L'unica cosa che MySQL non fa a differenza di InterBase/FireBird (che io
preferisco) è la gestione delle transazioni...


 ma non vedo perche non dovrebbe funzionare sotto MySql...
Non vedi, perche' non conosci mySQL...
Se sei cosi' sicuro di una roba fattibile in un qualsiasi sistema deducendo
da informazione inventata, potresti avere brutte sorprese.
*SCNR*
-- 
I'm not a signature.

 dovrebbe funzionare sotto MySql...
Mi sembra di capire che Mysql non supporti l'integrida' referenziale.

 da informazione inventata, potresti avere brutte sorprese.
Dare un consiglio è sempre un bene, al massimo vieni smentito :-)
Ho scritto "funziona perfettamente sotto FireBird e Interbase, ma non vedo
perche non dovrebbe funzionare sotto MySql"...
Effettivamente non funziona sotto MySql.
Mi sono documentato, MySql non implementa l'integrità referenziale, ma
supporta le parole chiave "FOREIGN KEY" per l'istruzione "CREATE TABLE" solo
per questioni di portabilità verso altri database. Quindi quello che ho
scritto (basandomi non su informazioni inventate ma sullo standard SQL) è
corretto, il fatto che poi MySql lo ignori completamente (per favorire la
velocità) non risolve il problema del thread...
Pace, sarà per la prossima volta.


 da informazione inventata, potresti avere brutte sorprese.
Cosa mi consigli di fare nel mio  caso?

 preferisco) è la gestione delle transazioni...
Ho detto una cavolata, le transazioni non sono l'unica cosa in cui MySql si
differenzia da IB/FB. Non è supportata nemmeno l'integrità referenziale. E
chissà cos'altro...
Bye,


il sapiente Vincenzo "TaTaC" Lavino dice:

con mysql una query per tabella...
PRIMA i figli, POI il padre.
così, al limite devi ricancellare il padre ma non rischi di avere orfani.
(facendo gli scongiuri che non succeda mai niente)
-- 
Punkarruso
mail:punkarruso(at)geniotradottoininglese(dot)it
pubblicità progresso:
http://www.gnu.org/gnu/why-gnu-linux.it.html

 Pace, sarà per la prossima volta.
ACK, ;-)


 Cosa mi consigli di fare nel mio  caso?
Con mysql e PHP puoi anche garantire la integrita' di un database 
facendo delle query. Anche un mini tool che controlla ognitanto
la integrita' dei dati non sarebe male.
Cmq. con due query fai la stessa cosa come in altri database
nei quali puoi definire la dipendenza, importante che tutte
le modifiche vengono fatte in modo coeerente. 


 ha scritto nel messaggio
news:pan.2002.07.25.14...@xpedite.it...

Il "Trigger" è una funzione che viene scatenata al verificarsi di un evento
sul Database.
Per esempio posso utilizzare un Trigger per  registrare in una tabella i
dati dell'utente che ha modificato dei dati in un'altra tabella del DB.
In SQL si crea con:
CREATE TRIGGER Nome_Trigger
        ON Nome_Tabella
        FOR {INSERT, DELETE, UPDATE}
        AS Istruzioni_SQL
Dove:
Nome_trigger ............... è il nome che diamo al trigger
Nome_Tabella ............. Nome della tabella sulla quale scatta il trigger
FOR ............................ specifica su operazione (Inserimento,
Cancellazione, Modifica) il trigger deve scattare
Istruzioni_SQL ............. Qualunque istruzione SQL (per esempio registra
la UserId dell'utente che ha scatenato il trigger nella tabella Pinko)
Ma non penso proprio che MySQL supporti i Trigger, forse Interbase si,
sicuramente SQL Server.
Ciao Massimiliano
Il "Trigger" è una funzione che viene scatenata al verificarsi di un evento
sul Database.
Per esempio posso utilizzare un Trigger per  registrare in una tabella i
dati dell'utente che ha modificato dei dati in un'altra tabella del DB.
In SQL si crea con:
CREATE TRIGGER Nome_Trigger
        ON Nome_Tabella
        FOR {INSERT, DELETE, UPDATE}
        AS Istruzioni_SQL
Dove:
Nome_trigger ............... è il nome che diamo al trigger
Nome_Tabella ............. Nome della tabella sulla quale scatta il trigger
FOR ............................ specifica su operazione (Inserimento,
Cancellazione, Modifica) il trigger deve scattare
Istruzioni_SQL ............. Qualunque istruzione SQL (per esempio registra
la UserId dell'utente che ha scatenato il trigger nella tabella Pinko)
Ma non penso proprio che MySQL supporti i Trigger, forse Interbase si,
sicuramente SQL Server.
Ciao Massimiliano
PS: Scusa se ti ho erroneamente risposto direttamente per e-mail

> il sapiente Vincenzo "TaTaC" Lavino dice:
NO non l'ho detto io leggi bene.

 le modifiche vengono fatte in modo coeerente.
Avevo bisogno di un aiuto + pratico.
Comunque grazie mille.

 NO non l'ho detto io leggi bene.
ho risposto a un messaggio tuo!!
se quoti testo di altri, comunque del tuo c'è!
(o no?? fa lo stesso...)
ciaooo
-- 
Punkarruso
mail:punkarruso(at)geniotradottoininglese(dot)it
pubblicità progresso:
http://www.ic.unicamp.br/~oliva/papers/free-software/selection-html/

 la integrita' dei dati non sarebe male.
Stavo pensando a quello che hai scritto, cosa intendevi?

 Stavo pensando a quello che hai scritto, cosa intendevi?
un controllo di questo genere (molto semplificato):
tblUtenti:
  ID_Utente Nome Cognome
tblAccess:
  ID_Log ID_Utente data
per testare l'integrita' vai a verficare se tutti i Record della 
tblAccess contengono un ID_Utente che sia presente in tblUtenti.
Quindi fai un 
  SELECT ID_Utente FROM tblAccess GROUP BY ID_Utente;
 
  poi per ogni ID_Utente
    SELECT COUNT(*) FROM tblUtenti WHERE ID_Utente=$idTabellaAccess;
      Se il risultato e 1-> OK
      se diverso da 1 (sarebbe molto grave se >1) -> problema.
Tenere l'integrita' di cancellare le schede tblUtenti:
  DELETE FROM tblUtenti WHERE ID_Utente=$ID
  DELETE FROM tblAccess WHERE ID_Utente=$ID
Deve essere chiaro che il mySQL e molto semplice e che alcuni
lavori possibili in altri linguaggi SQL vengono spostati dal
lato Server Database al lato Client Database. Se l'applicazione
client e' una sola non ci sono grandi problemi. Ma se sono diverse
applicazioni (non diversi client con la stessa applicazione) le 
cose si complicano. 
Se hai la possibilita' di usare Postgres (o altri) e' preferibile di
utilizzare questo al posto del mySQL (ma tanti hosting offrono solo
mySQL).


 mySQL).
THKS per lo "spunto".
Ciao