![]() |
![]() ![]() |
![]() |
![]() ![]()
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 |
|
|
![]() ![]()
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 (IMG:style_emoticons/default/wink.gif) |
|
|
![]() ![]()
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
|
|
|
![]() ![]()
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 (IMG:style_emoticons/default/smile.gif) zapomniałem dopisać parentbannerid dzięki za pomoc (IMG:style_emoticons/default/smile.gif) Ten post edytował fiasko 28.05.2012, 09:45:48 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 5.10.2025 - 00:12 |