Tutorijali.Net forum
Brisanje duplih mailova iz više tablica u SQL-u - Printable Version

+- Tutorijali.Net forum (http://www.tutorijali.net/forum)
+-- Forum: Izrada weba (/forumdisplay.php?fid=5)
+--- Forum: Ostalo (/forumdisplay.php?fid=23)
+--- Thread: Brisanje duplih mailova iz više tablica u SQL-u (/showthread.php?tid=1997)

Pages: 1 2


Brisanje duplih mailova iz više tablica u SQL-u - Son Goku - 18-09-2013 11:25 AM

Pozdrav,

imam nekoliko tablica sa gomilama mailova, a neki mailovi koji su u prvoj tablici su i u drugoj i trečoj tablici, itd.

Sada bi htio ako je moguće da obrišem te duple mailove, iz svih tablica, znači ako je neki mail u 1., 2. i 3. tablici da ostane samo u 1., odnosno čak nije ni bitno u kojoj tablici će ostati, samo da se obriše iz ostalih tablica i ostane u jednoj tablici, bilo kojoj.

Da li je to moguće?

Tražio sam po netu, ali nema baš nekih primjera...

Hvala i pozdrav


RE: Brisanje duplih mailova iz više tablica u SQL-u - Gogy - 19-09-2013 09:48 PM

Vjerojatno ima elegantnijih načina ali ja bi to ovako napravio (iz glave, sorry ako ima grešaka):

PHP Code:
$query mysql_query"SELECT email from prvatablica");
while (
$row=mysql_fetch_array($query)) {
    
mysql_query("DELETE FROM drugatablica WHERE email = $row['email']");
    
mysql_query("DELETE FROM trecatablica WHERE email = $row['email']");




RE: Brisanje duplih mailova iz više tablica u SQL-u - Son Goku - 20-09-2013 10:35 AM

hvala, ali javlja greške ispored oba mysql_query...


RE: Brisanje duplih mailova iz više tablica u SQL-u - Gogy - 21-09-2013 01:04 PM

PHP Code:
mysql_query("DELETE FROM drugatablica WHERE email = '".$row['email']."' ");
 
mysql_query("DELETE FROM trecatablica WHERE email = '".$row['email']."' "); 

Malo navodnike samo popraviš


RE: Brisanje duplih mailova iz više tablica u SQL-u - Son Goku - 23-09-2013 01:34 PM

Hvala, čini se da radi sada, ali mi kad pokrenem skriptu javlja mi se sljedeća greška

Quote:504 Gateway Time-out
The server didn't respond in time.

Vjerovatno zato jer u jednoj tablici imam oko 500 000 mailova, u drugoj oko 100 000, a u ostalima nešto manje pa se server previše muči...

Može li se to nekako srediti?


RE: Brisanje duplih mailova iz više tablica u SQL-u - Gogy - 23-09-2013 05:37 PM

Probaj staviti sljedeće ispred tog koda.
PHP Code:
set_time_limit(0); 

To bi trebalo maknuti vremenski limit PHP-u.


RE: Brisanje duplih mailova iz više tablica u SQL-u - Gogy - 23-09-2013 07:20 PM

Ako to ne radi, jedna od solucija je napraviti Javascript/Ajax skriptu koja bi pozivala PHP kod koji bi imao limitirani broj mailova koje izbriše.
Tako da bi se PHP kod pozivao u intervalima kroz javascript te bi se time smanjilo vrijeme PHP-u potrebno za obradu podataka. Recimo ako bi limitirali
broj na npr. 1000 mailova, to se za čas odradi, i onda se javascriptom pozove ponovno.

Dakle PHP kod bi izgledao otprilike ovako:

delete.php
PHP Code:
$start $_POST['start'];
$end $_POST['start']+1000;
$query mysql_query"SELECT email from prvatablica LIMIT ".$start.",".$end."");
while(
$row=mysql_fetch_array($query)) {
   
mysql_query("DELETE FROM drugatablica WHERE email = '".$row['email']."' ");
   
mysql_query("DELETE FROM trecatablica WHERE email = '".$row['email']."' "); 


A za ajax bi mogao koristit jquery (nadam se da znaš kako ga includat na stranicu, ako ne proguglaj) pa bi ti to izgledalo ovako:


Code:
var cnt = 0;
function brisiMailove(cnt) {

$.post( "delete.php?start="+cnt, function( data ) {
    brisiMailove(cnt+1000); // Kad obrise 1000 komada, krece po novih 1000 komada
  });  
}

brisiMailove(cnt);

Nisam testirao ali tako nekako otprilike...


RE: Brisanje duplih mailova iz više tablica u SQL-u - Son Goku - 24-09-2013 10:14 AM

PHP Code:
set_time_limit(0); 
ne pomaže :(

Onda sam probao ovako
PHP Code:
$start 0;
$end 1000;
$query mysql_query"SELECT email from prvatablica LIMIT ".$start.",".$end."");
while(
$row=mysql_fetch_array($query)) {
   
mysql_query("DELETE FROM drugatablica  WHERE email = '".$row['email']."' "$mk_conn) or die(mysql_error());

znači direktno sam pokrenuo skriptu u browseru, i ponovo mi se nakon nekog vremena pojavi onaj error
Quote:504 Gateway Time-out
The server didn't respond in time.
Tako da mislim da ni preko Javascript/Ajax ne bi radilo, ili se varam?

prvatablica ima oko 500 000 mailova
drugatablica ima oko 100 000 mailova


RE: Brisanje duplih mailova iz više tablica u SQL-u - Gogy - 24-09-2013 11:39 AM

Da li ti je to negdje lokalno ili na nekom serveru?
Malo mi je čudno da ima problema sa brisanjem 1000 redaka iz baze. Ako je na nekom hostingu probaj kontaktirat hosting providera da ti objasni iz kojeg razloga ti izbacuje taj error.

Probaj tako kako si napravio sa nekim manjim brojem, da vidiš gdje ti je granica.


RE: Brisanje duplih mailova iz više tablica u SQL-u - Son Goku - 24-09-2013 02:24 PM

Na serveru. Ma problem se javlja kada pokušavam obrisati tih 1000 redaka iz tablice koja ima 500 000 mailova, tu dođe do greške, a kod ovih manjih tablica sa po oko 20, 30k mailova nema greške...