Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Dodawanie rekordów BD z dynamicznej tablicy
Forum PHP.pl > Forum > PHP
MESSIAH :)
Witam serdecznie wszystkich.
Mam zagwozdkę z tematyki logiki. Nie wiem jak odpowiednio i optymalnie dodawać wartości do Bazy Danych z tablicy dynamicznej wielowymiarowej a konkretniej tablicy która codziennie ma nowe tablice - jedne dodane drugie skasowane i nie mam zbytnio na otrzymane dane wpływu. Przykładowa tablica wygląda tak
  1. stdClass Object
  2. (
  3. [s] => Array
  4. (
  5. [0] => stdClass Object
  6. (
  7. [id] => 45481891
  8. [userid] => 5648948
  9. [paypalid] => 56489498
  10. [paytype] => pay
  11. [paypaltype] => old
  12. [paypalamount] => 2.99
  13. [paypalcomlete] => 0
  14. [paypaldetails] => stdClass Object
  15. (
  16. )
  17. [paypalincome] => 0
  18. [paypalosd] => 0
  19. )
  20.  
  21. [1] => stdClass Object
  22. (
  23. [id] => 56481565
  24. [userid] => 45448156
  25. [paypalid] => 6548489
  26. [paytype] => pay
  27. [paypaltype] => old
  28. [paypalamount] => 13.22
  29. [paypalcomlete] => 0
  30. [paypaldetails] => stdClass Object
  31. (
  32. )
  33. [paypalincome] => 0
  34. [paypalosd] => 0
  35. )
  36.  
  37. [2] => stdClass Object
  38. (
  39. [id] => 789797
  40. [userid] => 87879879
  41. [paypalid] => 879788798
  42. [paytype] => pay
  43. [paypaltype] => new
  44. [paypalamount] => 12.34
  45. [paypalcomlete] => 0
  46. [paypaldetails] => stdClass Object
  47. (
  48. )
  49. [paypalincome] => 0
  50. [paypalosd] => 0
  51. )
  52. )
  53. )

Ostatnie tablice są zawsze najnowsze lecz są to ilości randomowe dlatego może być 1 nowa dziennie lub 10 nowych. Chciałbym teraz dodawać tylko i wyłącznie nowe unikalne tablice do Bazy Danych - tak aby wpisy się nie duplikowały i jeśli dana tablica jest w bazie to powinna zostać pominięta a nowa unikalna powinna zostać dodana. Jak mogę rozwiązać taką logikę? Proszę o jakieś porady itp.
nospor
ID jest unikatowe? no to nadaj w bazie na to pole UNIQUE i wkladaj po kolei jak leci. Jak sie wylozy znaczy ze juz jest smile.gif
MESSIAH :)
Tak każda tablica ma swój unikatowy ID. Jeśli będzie ten UNIQUE to MySQL już nie przyjmie tej samej wartości?
nospor
Cytat
Jeśli będzie ten UNIQUE to MySQL już nie przyjmie tej samej wartości?
Tak, na tym wlasnie polega index UNIQUE - jak sama nazwa wskazuje jest unikatowy
MESSIAH :)
Teraz mi wysypuje błąd:
SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry
Można wyłączyć ten konkretny błąd?
Używam PDO. Mam zrobić if statemen dla poprawnego wysłania do BD i zrobić exit w razie duplikatu?
nospor
Kiedy ci to wyskakuje? Jak probujesz stworzyc ten UNIQUE indeks czy juz jak dodajesz nowe rekordy?
MESSIAH :)
Jak dodaje nowe wpisy. Myślałem że ten UNIQUE jeśli natrafi na duplikat ominie go i przejdzie do następnego a tutaj pluje błędem. Trochę to będzie upierdliwe przy większej ilości tablic. Chciałbym aby zostały tylko dodane nowe tablice a duplikatuy ominięte.
Pyton_000
INSERT IGNORE INTO
MESSIAH :)
O to działa tylko dlaczego ID w bazie danych jest podnoszone o ilość prób INSERT?
Mam np: ID 27 po 3 próbach wysłania tego samego zapytania UNIQUE omija duplikaty lecz przy następnej próbie wysłania innych wartości zostają one prawidłowo dodane z tą różnicą iż ID wyniesie 31 a nie 28.
nospor
A po co korzystasz z autoincrement skoro i tak masz swoje ID? Czemu nie skorzystasz tylko z tego?

Co do problemu to masz kilka opcji
http://stackoverflow.com/questions/5655396...ent-primary-key
https://www.percona.com/blog/2011/11/29/avo...-insert-ignore/
http://stackoverflow.com/questions/5924762...uplicate-insert
Pyton_000
Dlatego że masz tabelę typu InnoDB. Taki urok smile.gif Nie przejmowałbym się tym jakoś specjalnie. Zanim zapełnisz wszystkie ID minie troszkę czasu. W ostateczności możesz zmienić na MyIsam
MESSIAH :)
Cytat(Pyton_000 @ 1.08.2016, 18:44:01 ) *
Dlatego że masz tabelę typu InnoDB. Taki urok smile.gif Nie przejmowałbym się tym jakoś specjalnie. Zanim zapełnisz wszystkie ID minie troszkę czasu. W ostateczności możesz zmienić na MyIsam

Dajmy na to że będzie minimum 25 tabel dziennie * 12/1h * 24h = 7200 id. dziennie
Pyton_000
Czyli starczy Ci na kilkaset lat wink.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.