Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MySQL]Aktualizacja wielu rekordów naraz w MySQL
Forum PHP.pl > Forum > Przedszkole
northwest
Witam serdecznie,
mam 2 tabelki w MySQL:

  1. CREATE TABLE IF NOT EXISTS `cms_temer` (
  2. `bf_id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT,
  3. `nazwa` int(11) NOT NULL,
  4. `ilosc` int(11) NOT NULL,
  5. PRIMARY KEY (`nazwa`),
  6. UNIQUE KEY `id` (`bf_id`),
  7. UNIQUE KEY `nazwa` (`nazwa`)
  8. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;
  9.  
  10.  
  11. CREATE TABLE IF NOT EXISTS `cms_produkty` (
  12. `bf_id` bigint(35) UNSIGNED NOT NULL AUTO_INCREMENT,
  13. `nazwa` varchar(455) COLLATE utf8_unicode_ci DEFAULT NULL,
  14. `obrazek` varchar(400) COLLATE utf8_unicode_ci DEFAULT NULL,
  15. `isbn` varchar(20) COLLATE utf8_unicode_ci DEFAULT NULL,
  16. `kategoria` int(11) DEFAULT NULL,
  17. `podkategoria` int(11) DEFAULT NULL,
  18. `podgrupa` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  19. `ate` varchar(300) COLLATE utf8_unicode_ci DEFAULT NULL,
  20. `ilosc` int(11) DEFAULT '1',
  21. UNIQUE KEY `id` (`bf_id`),
  22. UNIQUE KEY `isbn` (`isbn`),
  23. KEY `nazwa` (`nazwa`(333)),
  24. KEY `podkategoria` (`podkategoria`),
  25. KEY `kategoria` (`kategoria`)
  26. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;



W tabeli cms_produkty mam różnego rodzaju produkty (ok 200 tys). W tabeli cms_temer - mam codziennie aktualizowane stany.
Opis tabeli cms_temer:
nazwa = cms_produkty.ate
ilość = cms_produkty.ilosc
Muszę na podstawie tabeli cms_temer przeprowadzić aktualizację produktów w tabeli cms_produkty
Próbuję rozwiązać tą aktualizację za pomocą skryptu:

  1. $update1 = null;
  2. $update2 = null;
  3. $update3 = null;
  4. $iillee = 0;
  5. $update = null;
  6. $wynik = mysql_query(" SELECT * FROM cms_temer ;") or die('Query failed: ' . mysql_error());
  7. while($rek = mysql_fetch_array($wynik)) {
  8. if($iillee < 200) {
  9. $update .= " UPDATE cms_produkty2 SET ilosc = '$rek[ilosc]' WHERE ate = '$rek[nazwa]'; ";
  10. $update1 .= " WHEN $rek[nazwa] THEN '$rek[ilosc]' ";
  11. $update2 .= " $rek[nazwa], ";
  12. $update3 .=
  13. $iillee = $iillee + 1;
  14. }
  15. if($iillee == 200){
  16. $update2 = substr($update2, 0, -3);
  17. $qqqqqq = "UPDATE cms_produkty2 SET ilosc = CASE ate
  18. $update1
  19. ELSE ilosc END
  20. WHERE ate IN ($update2);
  21. ";
  22. mysql_query($qqqqqq);
  23. $update1 = null;
  24. $update2 = null;
  25. $update3 = null;
  26. $iillee = 0;
  27. }
  28. }



Problem w tym że nie wszystkie rekordy zawsze mi się aktualizują.... Część produktów ma zmieniony stan - a część nie... Ma ktoś może pomysł jak to naprawić?

Bardzo proszę o pomoc,
Northwest


nospor
Mozesz napisac slowami co chcesz dokladnie zrobic? Bo nie chce mi sie analizowac co ten kod php robi dokladnie.

ps: podejrzewam ze calosc mozna zrobic jednym zapytaniem UPDATE. Nie ma sensu walic tutaj petryliarda zapytan

ps2: bigint(35) - duza liczba.... wink.gif sam tworzyles te tabele?
Pyton_000
Tak, zapewne coś takiego wystarczy:
  1. UPDATE accomodation a, country c
  2. SET a.country = c.country
  3. WHERE a.country_id = c.country_id;
northwest
Już opisuję smile.gif

Mam tabelkę produktów: cms_produkty2 (w opisie zapomniałem "2" - przepraszam).

w tej 2 tabelce mam codziennie aktualizowane stany (ILOŚCI produktów). Muszę zaktualizować cms_produkty - na podstawie wartości z cms_temer.

Zależności wyglądają następująco:
cms_temer.nazwa = cms_produkty.ate
cms_temer.ilość = cms_produkty.ilosc

Próbuję to właśnie w php rozwiązać i albo mi się zapętla skrypt (chodzi 40 minut i nie chce się skończyć) - albo nie wszystkie pola aktualizuje (wariant który podałem na forum przeprowadza niepełną aktualizację) :-(

Bardzo proszę o pomoc
nospor
No i nadal nie wiem co ma sie jak aktualizowac.... z kodu wynika, ze są tam jakies dzikie kombinacje, zas z opisu nic o dzikich kombinacjach nie wynika. Jesli wiec nie ma dzikich kombinacji, to jak mowilem wystarczy JEDNO zapytanie mysql i nic wiecej. Przyklad takiego zapytania podał Pyton w swoim poscie.
northwest
dziękuje, pomogło 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.