Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,923

    eliminare record correlati a catena.

    Premetto che ho utilizzato mysql vers.4.0.15.
    Lo script funziona ma dovendo cancellare un record devo eliminare tutti i record relativi a quell'id che sono presenti nelle altre tabelle.
    Volevo sapere se con le ultime modifiche apportate a mysql è possibile eliminare "a catena" tutti i record correlati a un certo id
    oppure se devo per forza procedere in questo modo.
    P.S. Come si fa quando si posta del codice a dargli la formattazione (in termini di colore intendo) che si ha ad esempio usando DW e che vedo che tanti qui utilizzano.
    Grazie in anticipo.



    <?php
    $idfamiglia = $_REQUEST['idfamiglia'];
    if ($idfamiglia)
    {
    //Connessione al server mysql
    $connessioneDB = @mysql_connect("$server","$user") or die("$errConnessione");

    //Selezione del database
    @mysql_select_db("$database") or die ("$errSelezione");


    //Al fine di evitare la presenza di record 'orfani', qualora si decida di cancellare una famiglia
    //bisogna eliminare anche tutti i record dalle altre tabelle relativi a quella famiglia nel caso
    //esistano
    $sqlinterr = "delete FROM datifamaffidat WHERE";
    $sqlinterr.= " idfamiglia = '$idfamiglia'";

    $query = mysql_query("SELECT * FROM datianagraficiaffidatari WHERE idfamiglia = $idfamiglia") or die(mysql_error());
    $num = mysql_num_rows($query);

    if ($num =='1')
    {
    $cancellazioneTabellaDatiAnagrafici = "delete FROM datianagraficiaffidatari WHERE idfamiglia = '$idfamiglia'";
    mysql_query ($cancellazioneTabellaDatiAnagrafici) or die(mysql_error());
    }

    $query2 = mysql_query("SELECT * FROM daticonsultorioriferfamaffidat WHERE idfamiglia = $idfamiglia") or die(mysql_error());
    $num2 = mysql_num_rows($query);

    if ($num2 =='1')
    {
    $cancellazioneTabellaDatiOperatori = "delete FROM daticonsultorioriferfamaffidat WHERE idfamiglia = '$idfamiglia'";
    mysql_query ($cancellazioneTabellaDatiOperatori) or die(mysql_error());
    }

    $query3 = mysql_query("SELECT * FROM precespfamaffidat WHERE idfamiglia = '$idfamiglia'") or die(mysql_error());
    $num3 = mysql_num_rows($query);

    if ($num3 =='1')
    {
    $cancellazioneTabellaDatiEsperAffido = "delete FROM precespfamaffidat WHERE idfamiglia = '$idfamiglia'";
    mysql_query ($cancellazioneTabellaDatiEsperAffido) or die(mysql_error());
    }

    $query4 = mysql_query("SELECT * FROM servizicomune WHERE idfamiglia = '$idfamiglia'") or die(mysql_error());
    $num4 = mysql_num_rows($query);

    if ($num4 =='1')
    {
    $cancellazioneTabellaDatiServiziComune = "delete FROM servizicomune WHERE idfamiglia = '$idfamiglia'";
    mysql_query ($cancellazioneTabellaDatiServiziComune) or die(mysql_error());
    }

    mysql_query ($sqlinterr) or die(mysql_error());

    $num = mysql_affected_rows();
    if ($num>0)
    echo "<div align=\"center\"><font color=\"#3333CC\" size=\"+2\">Il record è stato cancellato</div>

    ";
    else
    echo "<div align=\"center\"><font color=\"#3333CC\" size=\"+2\">Il record non è stato cancellato</div>

    ";

    mysql_close($connessioneDB);
    }
    else
    echo "Non è stato selezionato alcun record

    ";
    ?>

  2. #2
    Ciao.

    Devi usare le foreign keys utilizzando come opzioni il DELETE CASCADE.
    Ricorda che non funzionanno con le MyIsam, ma devi usare le INNODB.

    CIAU CIAU

    P.S. Non ricordo se sono supportate dalla versione che usi tu, ma creo di si.
    Se la vita ti sorride, ti sta prendendo per il cul0

  3. #3
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,923
    Mi sembra che la mia versione non supporti le chiavi esterne.
    Ricordavo di aver letto da qualche parte che era stato aggiunto questo supporto.
    Ora che mi hai dato l'imbeccata mi documento.
    Grazie mille.

  4. #4
    Originariamente inviato da nicola75ss
    Mi sembra che la mia versione non supporti le chiavi esterne.
    Ricordavo di aver letto da qualche parte che era stato aggiunto questo supporto.
    Ora che mi hai dato l'imbeccata mi documento.
    Grazie mille.
    devi attivare l'innoDB dal file My che si trova dentro la cartella Bin di mysql...
    se ci sono stringhe commmentate per l'innoDB vuol dire che lo puoi usare..basta decommentarle!!

    e poi devi trasformare le tue tabelle da MyIsam a InnoDB!

    cmq in caso contrario puoi sempre rimediare con un bello scriptino in PHP!!
    "Due cose riempiono l’animo di ammirazione e venerazione sempre nuova e crescente, quanto piú spesso e piú a lungo la riflessione si occupa di esse: il cielo stellato sopra di me, e la legge morale in me..." Immanuel Kant

  5. #5
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,923
    Grazie.Ignoravo completamente questa cosa.
    Pensavo che a seconda della versione di mysql fossero abilitate di default.
    Un'altra domanda. E' possibile modificare il tipo da Isam a InnoDB o rischio di perdere i dati contenuti.
    E nel caso si possa fare la sintassi è quella di alter table anche per la tipologia?

  6. #6
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,923
    uppete

  7. #7
    Si, lo puoi fare senza problemi.
    La sintassi è:

    ALTER TABLE `nome tabella` TYPE = MYISAM

    CIAU CIAU
    Se la vita ti sorride, ti sta prendendo per il cul0

  8. #8
    Ciao,

    la versione MySQL che usi consente i delete multitabella, questo senza foreign keyes e tabelle innodb

    http://dev.mysql.com/doc/mysql/en/delete.html
    per favore NIENTE PVT TECNICI da sconosciuti

  9. #9
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,923
    Grazie Fabio.Ora mi leggo bene la pagina che mi hai suggerito.

  10. #10
    Utente di HTML.it
    Registrato dal
    Apr 2003
    Messaggi
    327
    non ho capito bene, le mie tabelle hanno le foreign key, non c'è il delete automatico dei campi correlati?
    By Games

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.