Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Masowy update rekordów
Forum PHP.pl > Forum > PHP
szok
Witam, mam do was pytanko, czy ktoś może spotkał się już z czymś takim.

Posiadamy bazę danych w firmie z produktami i osobną bazę danych w sklepie internetowym.
I teraz tak.
w Sklepie internetowym jest ok 3000 produktów a w bazie w firmie jest 4500 produktów
Każdy produkt ma swój symbol i chodzi teraz o aktualizacje produktów w sklepie internetowym.

Aktualizacja dotyczyć się tylko będzie ceny i ilości produktu. Jeżeli wszystko jest ok to nie będzie aktualizować.

Mam wygenerowany automatycznie plik tekstowy z produktami z firmy w postaci:

symbol|stan|cena

I teraz jak najlepiej to zrobić aby zaktualizować te dane na sklepie www ?

Dodam tylko że ta operacja będzie się wykonywać raz na 24 godziny.

Myślałem o tym aby wczytać ten plik, lecieć po kolei z zapytaniami WHERE kod=symbol i jeżeli istnieje to zmieniać mu dane, jeżeli nie to leci dalej, ale to i tak wykona się 4500 razy sad.gif co mnie nie ciekawi. Proszę o jakąś rade. Pozdrawiam
nexis
Pętla wykonująca się 4500 razy raz na 24 godziny to praktycznie żadne obciążenie dla serwera, więć jak najbardziej możesz to właśnie tak zrobić.
szok
Ale to będzie tylko jedne wykonanie, czyli liczę że to będzie 4500 zapytań do bazy z ciągu jakiś 5 minut, więc na pewno nic się nie stanie? serwery są na nazwa.pl

Pozdrawiam
nexis
Nie wiem po co ludzie pytają co się stanie zamiast to po prostu spróbować. Ale mimo wszystko odpowiem na twoje pytanie: nic się nie stanie!
nevt
skoro masz ładnie przygotowany plik w formacie CSV to możesz załatwić aktualizację jednym zapytaniem MySQL:
  1. LOAD DATA INFILE 'file_name' REPLACE INTO TABLE `tabela` FIELDS TERMINATED BY '|';

i żadne pętle w PHP nie będą potrzebne...
szok
Cytat(nevt @ 22.10.2008, 19:42:28 ) *
skoro masz ładnie przygotowany plik w formacie CSV to możesz załatwić aktualizację jednym zapytaniem MySQL:
  1. LOAD DATA INFILE 'file_name' REPLACE INTO TABLE `tabela` FIELDS TERMINATED BY '|';

i żadne pętle w PHP nie będą potrzebne...



Ok, ale teraz, tabela products ma w sobie jakie 9 rekordów a ja chce zmienić tylko dwa, to jak można by to wykonać? aby podać nazwy rekordów?
nevt
a co to - rozdwojenie jaźni ? na początku posta aktualizujesz 4500 rekordów a na końcu już tylko 2?
2 rekordy to sobie zaktualizuj dwoma insertami w php ...
szok
nie, chodzi mi o rekordy w tabeli, struktura tabeli jest taka:

CREATE TABLE products (
id INT NOT NULL AUTO_INCREMENT,
cat_id INT NOT NULL,
price FLOAT NOT NULL,
promo_price FLOAT NULL,
code VARCHAR(10) NOT NULL,
dost VARCHAR(1) NOT NULL,
atryb VARCHAR(500) NULL,
sort INT NOT NULL,
name VARCHAR(255) NOT NULL,
category2 INT NULL,
category3 INT NULL,
weight VARCHAR(12) NOT NULL,
vol1 VARCHAR(10) NOT NULL,
vol2 VARCHAR(10) NOT NULL,
vol3 VARCHAR(10) NOT NULL,
date_add DATETIME NOT NULL,
PRIMARY KEY ( `id` )
)

I chce aktualizować tylko price, code i dost

A tych produktów w bazie jest właśnie 4500

Najlepsze jest to że jak zrobiłem to w pętli to po kilku chwilach skrypt się wywalił i miałem błąd.
Pozdrawiam
bigZbig
Po pierwsze nic nie stoi na przeszkodzie abyś wykonał kilka updatów za jednym zamachem. Zainteresuje się np. funkcją mysqli_multi_query.

Po drugie powinieneś użyć transakcji, która zapewni, że albo wszystkie pytania się wykonają, albo żadne.

Po trzecie aktualizuj tylko te rekordy, które się zmieniły. Wtedy znacznie ograniczysz liczbę rekordów do aktualizacji.
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.