Visualizzazione dei risultati da 1 a 6 su 6

Discussione: DELETE con JOIN

  1. #1

    DELETE con JOIN

    devo fare un query delete su più tabelle per cancellare gli utenti che hanno eseguito la procedura di registrazione senza confermarla cliccando sul link presente nella mail che invio

    le tabelle in oggetto sono 4

    codice:
    CREATE TABLE IF NOT EXISTS `users` (
      `id_user` int(11) NOT NULL AUTO_INCREMENT,
      `username` varchar(31) NOT NULL,
      `passwd` varchar(31) NOT NULL,
      `email` varchar(150) NOT NULL,
      `registration` int(1) NOT NULL DEFAULT '0',
      `newsletters` int(1) NOT NULL DEFAULT '0',
      `data_reg` int(10) DEFAULT NULL,
      `data_access` int(10) DEFAULT NULL,
      PRIMARY KEY (`id_user`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=9 ;
    
    
    CREATE TABLE IF NOT EXISTS `users_newsletters` (
      `id_newsletters` int(11) NOT NULL AUTO_INCREMENT,
      `id_rel_user` int(11) NOT NULL,
      `code_newsletters` varchar(50) NOT NULL,
      PRIMARY KEY (`id_newsletters`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=6 ;
    
    CREATE TABLE IF NOT EXISTS `users_profili` (
      `id_profilo` int(11) NOT NULL AUTO_INCREMENT,
      `id_rel_user` int(11) NOT NULL,
      `nome` varchar(50) DEFAULT NULL,
      ...etc etc
      PRIMARY KEY (`id_profilo`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=8 ;
    
    CREATE TABLE IF NOT EXISTS `users_validate_reg` (
      `id_reg` int(11) NOT NULL AUTO_INCREMENT,
      `id_rel_user` int(11) NOT NULL,
      `code_confirm_reg` varchar(50) NOT NULL,
      PRIMARY KEY (`id_reg`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=8 ;
    in sostanza eseguo la seguente funzioni e ottenendo un array con gli id degli utenti non confermati:
    [php]
    function clear_confirm_reg()
    {
    $ora = time();
    $ventiquattro_ore = 24*60*60;
    $timeout = $ora-$ventiquattro_ore;
    $qqq = "SELECT id_user FROM users WHERE registration='0' AND data_reg='".$timeout."'";
    $rrr = mysql_query($qqq) or die(mysql_error());
    if(mysql_num_rows($rrr)>=1)
    {
    $array_id_delete = array();
    while($row = mysql_fetch_row($rrr))
    {
    $array_id_delete[] = $row[0];
    }
    /*cancellare dalla tabella users*/
    /*cencellare dalla tabella profili*/
    /*cancellare dalla tabella di conferma registrazione*/
    /*cancellare newsletters*/
    $qqq_delete ="DELETE

  2. #2
    Utente di HTML.it
    Registrato dal
    Jun 2010
    Messaggi
    323
    perdonami, ma qual'è la domanda ?

  3. #3

    Re: DELETE con JOIN

    Originariamente inviato da oly1982
    devo fare un query delete su più tabelle per cancellare gli utenti che hanno eseguito la procedura di registrazione senza confermarla cliccando sul link presente nella mail che invio
    Codice PHP:
    function clear_confirm_reg()
        {
        
    $ora time();
        
    $ventiquattro_ore 24*60*60;
        
    $timeout $ora-$ventiquattro_ore;
        
    $qqq "SELECT id_user FROM users WHERE registration='0' AND data_reg<='".$timeout."'";
        
    $rrr mysql_query($qqq) or die(mysql_error());
        if(
    mysql_num_rows($rrr)>=1)
            {
            
    $array_id_delete = array();
            while(
    $row mysql_fetch_row($rrr))
                {
                
    $array_id_delete[] = $row[0];
                }
            
    /*cancellare dalla tabella users*/
            /*cencellare dalla tabella profili*/
            /*cancellare dalla tabella di conferma registrazione*/
            /*cancellare newsletters*/
            
    $qqq_delete ="
                DELETE 
                    users, 
                    users_profili, 
                    users_newsletters, 
                    users_validate_reg
                FROM 
                    users 
                LEFT OUTER JOIN 
                    users_profili 
                    ON 
                    users.id_user = users_profili.id_rel_user
                LEFT OUTER JOIN
                    users_newsletters
                    ON 
                    users.id_user = users_newsletters.id_rel_user
                LEFT OUTER JOIN 
                    users_validate_reg
                    ON
                    users.id_user = users_validate_reg.id_rel_user
                WHERE 
                    users.id_user
                    IN 
                    ('"
    .implode("', '"$array_id_delete)."')";
            
            
    $rrr_delete mysql_query($qqq_delete) or die(mysql_error());
            }    
        return 
    TRUE;
        } 

  4. #4
    Utente di HTML.it L'avatar di telegio
    Registrato dal
    Sep 2001
    Messaggi
    2,591
    potresti usare una cosa tipo
    DELETE FROM tabella WHERE id IN (2, 27, 35, ...)
    senza usare cicli..
    se il tuo array lo formatti come nella query che ho messo, a me sembra perfetto..

  5. #5
    non ho capito cosa dici teleggio

  6. #6
    Utente di HTML.it L'avatar di telegio
    Registrato dal
    Sep 2001
    Messaggi
    2,591
    perdona il mio bollimento..
    credevo non avessi risolto.. in pratica avevo saltato il tuo ultimo messaggio..

    lascia perdere..

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 © 2025 vBulletin Solutions, Inc. All rights reserved.