Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [XML][MySQL][PHP] IMPORT z XML
kl4mor
post 8.02.2013, 09:15:20
Post #1





Grupa: Zarejestrowani
Postów: 33
Pomógł: 0
Dołączył: 7.12.2008

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


Mam peweim problem z importem danych z xmla, tzn. przychodzi xml i jest zapisywany do tabeli tymczasowej tu prawie wszytsko jest ok, natomiast kiedy zaczynam przepisywac produkty do tabeli "produkcyjnej" juz tak kolorowo nie jest, wszytskich rekordow jest ok 7000 i nie wiem czy dany rekord jest juz w bazie czy nie, wszytsko ejst odpalane cronem co 10 min, ale pokolei

import do tabeli tymczasowej wyglada tak i on jest odpalany jako pierwszy:
  1. $baza->query("INSERT INTO `xml_produkty` SET
  2. `IDXProduktu` = '".$v['IDXProduktu']."',
  3. `IDKategorii` = (SELECT `IDKategorii` FROM `xml_kategorie` WHERE `IDXKategorii` = '".$v['IDXKategorii']."'),
  4. ....
  5. `Akcja` = (SELECT COUNT(*) FROM `oferta_produkty` WHERE `IDXProduktu` = '".$v['IDXProduktu']."'),
  6. `PelnyOpis` = '".$v['PelnyOpis']."'");


tu pojawia sie pierwszy poblem, pole akcja sluzy do wykrycia czy dany produktu jest juz w bazie i czasem mimo ze produkt jest w bazie zwroci 0, i duplikuje mi produkty;

nastepnie kopiowanie produktow podzielime na czesci po 2000 produktow kazda, i tu wydaje sie byc wszytsko ok, oprocz zduplikwoanych produktow

  1.  
  2. $res = $baza->query("SELECT * FROM `xml_produkty` LIMIT ".$set.",".$offset);
  3. $QUERY = '';
  4. while($row = $res->fetch_assoc())
  5. {
  6.  
  7. if($row['Akcja'] == 0)
  8. {
  9. $baza->query("INSERT INTO `oferta_produkty` SET
  10. `IDXProduktu` = '".$row['IDXProduktu']."',
  11. ....
  12. `StatusProduktu` = '1',
  13. `Podatek` = '2',
  14. `Flag` = '1'
  15. ");
  16.  
  17. }
  18. else
  19. {
  20.  
  21. $QUERY .= " UPDATE `oferta_produkty` SET `NazwaProduktu` = '".$row['NazwaProduktu']."', [...] `Flag` = '1' WHERE `IDXProduktu` = '".$row['IDXProduktu']."'; ";
  22.  
  23. }
  24. }
  25.  
  26.  
  27. if( $QUERY != '')
  28. {
  29. $baza->multi_query($QUERY);
  30. }



i na koniec leca ceny tez podzielone po 2000 rekordow, cala tablica cen jest czyszczona i uzupelniena od nowa
  1. $res = $baza->query("SELECT * FROM `xml_ceny` LIMIT ".$set.",".$offset);
  2. $QUERY = '';
  3. while($row = $res->fetch_assoc())
  4. {
  5. $QUERY .= "INSERT INTO `oferta_ceny` SET `IDProduktu` = (SELECT `IDProduktu` FROM `oferta_produkty` WHERE `IDXProduktu` = ".$row['IDXProduktu']."), `IDXProduktu` = '".$row['IDXProduktu']."', `Wartosc` = '".$row['Wartosc']."';";
  6.  
  7. }
  8.  
  9. if($QUERY != '')
  10. $baza->multi_query($QUERY);


i tu pojawia sie kolejny problem bo zdarza sie ze nie przepisze mi cen z osatnich rekordow;
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 2)
CuteOne
post 8.02.2013, 11:34:30
Post #2





Grupa: Zarejestrowani
Postów: 2 958
Pomógł: 574
Dołączył: 23.09.2008
Skąd: wiesz, że tu jestem?

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


Nadaj klucz odpowiednim kolumnom a unikniesz duplikatów np. dla tabeli xml_produkty nadaj klucz PRMIARY kolumnie IDXProduktu a podczas dodawania rekordu
[MYSQL] pobierz, plaintext
[MYSQL] pobierz, plaintext

oo fajny błąd wyświetla o.O

INSERT IGNORE INTO

dzięki czemu powielone rekordy zostaną zignorowane

Ten post edytował CuteOne 8.02.2013, 11:35:30
Go to the top of the page
+Quote Post
kl4mor
post 11.02.2013, 08:39:27
Post #3





Grupa: Zarejestrowani
Postów: 33
Pomógł: 0
Dołączył: 7.12.2008

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


ale to zapytanie powinno zapowiebic duplikowaniu sie produktow

  1. [...]
  2. `Akcja` = (SELECT COUNT(*) FROM `oferta_produkty` WHERE `IDXProduktu` = '".$v['IDXProduktu']."'),


i to zawsze są to koncowe produkty ktore duplikuje


w tabeli `xml_produkty` wszytsko sie zgasza tu nie ma duplikatów, duplikaty pojawiają się w tabeli `oferta_produkty` a danie klucz PRMIARY dla kolumny IDXProduktu w tabeli oferta_produkty odpada bo wtedy nie bedzie mozna dodać produktu z poziomu strony, czy jest możliwe ze zapytanie które przekazuje do multi_query jest za długie ?

Ten post edytował kl4mor 11.02.2013, 08:39:47
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 Wersja Lo-Fi Aktualny czas: 14.08.2025 - 04:43