Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Masowy update rekordów
szok
post
Post #1





Grupa: Zarejestrowani
Postów: 165
Pomógł: 20
Dołączył: 2.03.2006

Ostrzeżenie: (0%)
-----


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


--------------------
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 8)
nexis
post
Post #2





Grupa: Zarejestrowani
Postów: 1 012
Pomógł: 109
Dołączył: 26.09.2003
Skąd: nexis.pl

Ostrzeżenie: (0%)
-----


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ć.


--------------------
Zend Certified Engineer

Kliknij POMÓGŁ jeśli moja odpowiedź okazała się użyteczna!
Go to the top of the page
+Quote Post
szok
post
Post #3





Grupa: Zarejestrowani
Postów: 165
Pomógł: 20
Dołączył: 2.03.2006

Ostrzeżenie: (0%)
-----


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


--------------------
Go to the top of the page
+Quote Post
nexis
post
Post #4





Grupa: Zarejestrowani
Postów: 1 012
Pomógł: 109
Dołączył: 26.09.2003
Skąd: nexis.pl

Ostrzeżenie: (0%)
-----


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!


--------------------
Zend Certified Engineer

Kliknij POMÓGŁ jeśli moja odpowiedź okazała się użyteczna!
Go to the top of the page
+Quote Post
nevt
post
Post #5





Grupa: Przyjaciele php.pl
Postów: 1 595
Pomógł: 282
Dołączył: 24.09.2007
Skąd: Reda, Pomorskie.

Ostrzeżenie: (0%)
-----


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...


--------------------

-
Oh no, my young coder. You will find that it is you who are mistaken, about a great many things... -
Go to the top of the page
+Quote Post
szok
post
Post #6





Grupa: Zarejestrowani
Postów: 165
Pomógł: 20
Dołączył: 2.03.2006

Ostrzeżenie: (0%)
-----


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?


--------------------
Go to the top of the page
+Quote Post
nevt
post
Post #7





Grupa: Przyjaciele php.pl
Postów: 1 595
Pomógł: 282
Dołączył: 24.09.2007
Skąd: Reda, Pomorskie.

Ostrzeżenie: (0%)
-----


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 ...


--------------------

-
Oh no, my young coder. You will find that it is you who are mistaken, about a great many things... -
Go to the top of the page
+Quote Post
szok
post
Post #8





Grupa: Zarejestrowani
Postów: 165
Pomógł: 20
Dołączył: 2.03.2006

Ostrzeżenie: (0%)
-----


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


--------------------
Go to the top of the page
+Quote Post
bigZbig
post
Post #9





Grupa: Zarejestrowani
Postów: 740
Pomógł: 15
Dołączył: 23.08.2004
Skąd: Poznań

Ostrzeżenie: (0%)
-----


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.


--------------------
bigZbig (Zbigniew Heintze) | blog.heintze.pl
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 19.08.2025 - 18:43