Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP] Problem z operacja na wielu rekordach
Spyder
post
Post #1





Grupa: Zarejestrowani
Postów: 269
Pomógł: 7
Dołączył: 12.10.2006
Skąd: Newcastle Upon Tyne

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


Witam

Mam while z okolo 30000 rekordów które dodaje do bazy przyklad:

  1. while ($item <= $no_items) {
  2.  
  3.  
  4.  
  5. $batch[] = array(
  6.  
  7. 'EMAIL'=>$ret[$item]['E-Mail Address'],
  8. 'FNAME'=>$ret[$item]['First Name'],
  9. 'LNAME'=>$ret[$item]['Last Name'],
  10. 'FULLNAME'=>$ret[$item]['Full Name'],
  11. 'GENDER'=>$ret[$item]['Gender'],
  12. 'ADDRESS'=>$ret[$item]['Address'],
  13. 'MOBILE'=>$ret[$item]['Mobile Number'],
  14. 'ORDERS_NO'=>$ret[$item]['Number Of Orders'],
  15. 'AVERAGE_VALUE'=>$ret[$item]['Average Order Value'],
  16. 'TOTAL_VALUE'=>$ret[$item]['Total Order Values'],
  17. 'BRANDS'=>$ret[$item]['Brands'],
  18. 'CATEGORY'=>$ret[$item]['Category'],
  19. 'SUBCAT_1'=>$ret[$item]['Sub Category 1'],
  20. 'SUBCAT_2'=>$ret[$item]['Sub Category 2'],
  21. 'LAST_ORDER'=>$ret[$item]['Last Purchased Date'],
  22. 'DATE_ADDED'=>$ret[$item]['Date Added']
  23.  
  24. );
  25.  
  26. $item++;
  27.  
  28. }


Wszystko dziala jednak system sie wywala jesli zrobie insert wiecej niz 5000 kazdego razu. Dodalem ini_set("memory_limit","16000M"); ale ciagle nie dziala. Zastanawiam sie czy da sie zrobic ze wysle 5000 rekordow potem strona sie przeladuje i zrobi kolejne 5000 i tak az do 30000??

Dzieki
Go to the top of the page
+Quote Post
pyro
post
Post #2





Grupa: Zarejestrowani
Postów: 2 148
Pomógł: 230
Dołączył: 26.03.2008

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


A w jaki sposób się wywala?

I na jaką cholere to serduszko w temacie (IMG:style_emoticons/default/tongue.gif) ?
Go to the top of the page
+Quote Post
tehaha
post
Post #3





Grupa: Zarejestrowani
Postów: 1 748
Pomógł: 388
Dołączył: 21.08.2009
Skąd: Gdynia

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


to zależy czy chcesz to jednorazowo zrobić, czy masz potrzebę robienia tego cyklicznie jeżeli jednorazowo - to rozbij to na małe pętle np. po 1000 , po skończeniu zapisz sobie do pliku tekstowego gdzie skończyłeś, odśwież i od nowa, a jeżeli cyklicznie to cron
Go to the top of the page
+Quote Post
Spyder
post
Post #4





Grupa: Zarejestrowani
Postów: 269
Pomógł: 7
Dołączył: 12.10.2006
Skąd: Newcastle Upon Tyne

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


Wiec tak mam csv z 30000 rekordami na serverze i funkcje która go czyta. Jak zwiekszylem pamies do 16mb to funkcja wyświetla na ekran 30000 rekordów. Schody zaczynaja się kiedy muszę wysłać przetworzone dane do kolejnego serwera wtedy mam myślenie przez 3 min i nic się nie dzieje. Jak zmniejsze czytanie tylko 5000 rekordów i przesłanie wszystko działa idealnie. Czyli szukam rozwiązania gdzie Cron uruchomi plik i plik zrobi 5000 rekordów wyśle je a potem zrobi kolejne 5000 i tak do 30000 jak to najlepiej rozwiązać? Dzieki
Go to the top of the page
+Quote Post
tehaha
post
Post #5





Grupa: Zarejestrowani
Postów: 1 748
Pomógł: 388
Dołączył: 21.08.2009
Skąd: Gdynia

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


No, ale skoro wiesz co chcesz zrobić to w czym problem? Po za tym problem nie jest nowy jak dobrze poszukasz to znajdziesz gotowy kod, np. http://www.sitepoint.com/forums/php-34/spl...p-670155-2.html, http://www.codewalkers.com/c/a/Database-Co...SV-Importer-20/
Go to the top of the page
+Quote Post
Spyder
post
Post #6





Grupa: Zarejestrowani
Postów: 269
Pomógł: 7
Dołączył: 12.10.2006
Skąd: Newcastle Upon Tyne

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


Tu nie chodzi o użycie gotowca a i tak większość się wywala przy dużych plikach jak 30000 rekordów. Poza tym plik przesyła dane przez Api do mailchimp. Wiem co chce zrobić ale nie wiem jak wstawić limit na while wykonać resztę kodu i uruchomić ta sama pętlę ale zacząć od miejsca gdzie skończyła poprzednia.
Go to the top of the page
+Quote Post
phpion
post
Post #7





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




Wykonuj insert do bazy co któryś przebieg pętli np. co 500 (jak - dzielenie modulo) i wówczas również czyść tablicę $batch ($batch = array()). Powinno pomóc.
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 24.09.2025 - 22:15