Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: pętla i 2 te same wpisy
Forum PHP.pl > Forum > PHP
szmerak
Witam!
Mam problem z pętlą i Insertem do bazy...
Napisałem skrypcik który kopjuje z mojej starej bazy do nowej...
czyli coś takiego
Select from stara baza
while($d = array)
{
i insert into nowa tabela
}

i przy tym pojawia się problem ponieważ dość często dodaje wpis 2x a nie wiem dlaczego tak jest
proszę o pomoc

probowalem nawet zwolnic petle
for($x=0;$x<10000;$x++)
ale nic to nie dalo
wewior
Rozumiem że z poziomu bazy jest czysto tzn nie ma żadnych trigerów czy funkcji który by to mogły generować?
Sprobuj może podesłać cały skrypt, może jakiś drobny błąd, bo domyślam się że dane jakoś obrabiasz w miedzyczasie....
Drugie pytanie czy wrzucałeś sobie może te dane do jakiegoś pliku żeby się upewnić że nie ma jakichś dubli pobieranych przez php i stąd te podwójne wpisy? Mało to prawdopodobne ale lepiej sprawdzić różne możliwości.
mortus
Takie pytanie: dane przenosisz pomiędzy dwiema różnymi bazami danych, czy pomiędzy dwiema różnymi tabelami w jednej bazie danych?
szmerak
powiem ci że nie dzieje się to gdy Blokuje tabele LOCK TABLE
ale wtedy nie umiem pobrać mysql_last_id...
Ja przypuszczam że skrypt po prostu nachodzi na siebie pętla "popiepsza" tak szybko że czasami doda doubla.

EDIT: pomiędzy dwoma bazami
mortus
Jeśli masz dużo rekordów i wstawiasz nowe rekordy wykonując zapytanie INSERT jedno po drugim, to być może za bardzo obciążasz serwer MySQL. Rozwiązaniem może być multi INSERT co np. 50 rekordów:
  1. $results = mysql_query('SELECT * FROM `tabela`');
  2. $i = 1;
  3. $sql = 'INSERT INTO `nowa_tabela` (`kolumna_1`, `kolumna_2`) VALUES ';
  4. while($row = mysql_fetch_assoc($results)) {
  5. $sql .= '('.$row['stara_kolumna_1'].', '.$row['stara_kolumna_2'].'),';
  6. if($i == mysql_num_rows($results) || $i%50 == 0) {
  7. $sql = substr($sql, 0, -1);
  8. mysql_query($sql);
  9. $sql = 'INSERT INTO `nowa_tabela` (`kolumna_1`, `kolumna_2`) VALUES ';
  10. }
  11. $i++;
  12. }
szmerak
rozwiązałem to na słój sposób tongue.gif zrobiłek tkz. Czyściciela i puszczam go cronem co jakiś czas tongue.gif
Mi to wystarczy nie bede za duzo kombinował smile.gif

Mortus to twoje rozwiązanie działa jak najbardziej smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.