![]() |
![]() ![]() |
![]() |
![]() ![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 243 Pomógł: 1 Dołączył: 1.06.2010 Ostrzeżenie: (0%) ![]() ![]() |
Mam problem z napisaniem zapytania , które uaktualni mi bazę danych jeśli rekord istnieje bądz też zapisze kolejny jeśli nie istnieje.
Tabela składa się z takich pól jak: impressionid - AUTO_INCREMENT accountid userid campaignid bannerid parentbannerid dateinserted raw Działać to ma tak, że w pierwszym wywołaniu utworzy mi się nowy rekord , a w drugim wywołaniu doliczę do tego rekordu w polu raw wartość 1 co łącznie powinno dać mi dwa. W trzecim wywołaniu raw powinno wynosić już 3 itd.
Zależy mi na wydajności zapytania więc, nie chciałem używać zapytania Select sprawdzającego czy rekord istnieje. Jakieś sugestie ? Póki co za każym razem tworzy mi się nowy rekord uniklne pola to : accountid userid campaignid bannerid parentbannerid dateinserted |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 709 Pomógł: 176 Dołączył: 24.10.2010 Ostrzeżenie: (0%) ![]() ![]() |
W mysql jest dostępne REPLACE można go użyć w ten sposób:\
Teraz dla przykładu jeżeli w moja Tabela mamy dane: Kod id|text 1 | aaaa 2 | bbbb to zapytanie:
zaktualizuje rekord o id 1 podczas gdy:
wstawi nowy rekord. Ten post edytował d3ut3r 28.05.2012, 00:11:45 -------------------- http://d3ut3r.wordpress.com/ | mysql_* jest przestarzałe UŻYWAJ PDO!
|
|
|
![]() ![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 243 Pomógł: 1 Dołączył: 1.06.2010 Ostrzeżenie: (0%) ![]() ![]() |
Niestety ale za każdym razem robi mi się nowy rekord:
Wynika przypadkiem nie wynika to z tego, że impressionid jest AUTO_INCREMENT ? Chcę zaktualizować rekord tylko gdy pola accountid, userid, campaignid, bannerid, dateinserted już istnieją. W innym wypadku musi się utworzyć nowy rekord. Macie jakieś pomysły ? |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 1 527 Pomógł: 438 Dołączył: 28.06.2011 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Radzę zapoznać się z INSERT ... ON DUPLICATE KEY
To Ci ładnie rozwiąże problem wg twoich dokładnych wytycznych ![]() -------------------- If you're good at something, never do it for free.
Potrzebujesz skryptu JS lub PHP - szukasz kogoś kto przetestuje twoją aplikację pod względem bezpieczeństwa? Szybko i solidnie? Napisz ;) Mój blog - Jak zwiększyć wydajność front-endu - O buforowaniu wyjścia w PHP słów kilka... |
|
|
![]() ![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 243 Pomógł: 1 Dołączył: 1.06.2010 Ostrzeżenie: (0%) ![]() ![]() |
No właśnie to mi nie działa. Nadałem unikatowe klucze na tabelę.
Zapytanie do bazy robię takie :
Za każdym razem robi mi się nowy rekord. Gdzie mam błąd ? Ten post edytował fiasko 28.05.2012, 09:42:33 |
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 1 527 Pomógł: 438 Dołączył: 28.06.2011 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
pomijasz pole "parentbannerid" - w kluczu jest ale przy insercie nie ma - sprawdź czy wszystko jest dokładnie tak jak należy - to musi zadziałać jeśli klucz jest powtarzany
-------------------- If you're good at something, never do it for free.
Potrzebujesz skryptu JS lub PHP - szukasz kogoś kto przetestuje twoją aplikację pod względem bezpieczeństwa? Szybko i solidnie? Napisz ;) Mój blog - Jak zwiększyć wydajność front-endu - O buforowaniu wyjścia w PHP słów kilka... |
|
|
![]() ![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 243 Pomógł: 1 Dołączył: 1.06.2010 Ostrzeżenie: (0%) ![]() ![]() |
Pomijam pole impressionid bo go nie znam . Skąd mam wiedzieć jakie ma id ?
Czy impressionid może być kluczem primary ? Dobra działa ![]() zapomniałem dopisać parentbannerid dzięki za pomoc ![]() Ten post edytował fiasko 28.05.2012, 09:45:48 |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 15.07.2025 - 01:47 |