[sql][php] Wykonanie zapytania w zależności od rekordu

0

Witam, mam taki problem bo piszę sobie skrypt i chcę zrobić coś takiego, sprawdzić czy istnieje rekord o imieniu Agnieszka i jeśli istnieje to zwiększyć ilość wystąpień, jeśli nie to wstawić rekord z imieniem Agnieszka. Czy możliwe jest to z poziomu samego SQL'a? Lub czy istnieje jakiś fajny sposób żeby to zrobić w jednym zapytaniu?

0
kaziuVBC napisał(a)

sprawdzić czy istnieje rekord o imieniu Agnieszka i jeśli istnieje to zwiększyć ilość wystąpień, jeśli nie to wstawić rekord z imieniem Agnieszka.

czytam to i czytam i nie rozumiem [!!!]

0

chodzi mi o to że jeśli istnieje rekord w którym imię = Agnieszka, wtedy zwiększ ilość wystąpień, w przeciwnym wypadku dodaj rekord z tym imieniem.

0

Musisz w czasie wstawiania rekordu zablokować całą tabelę bo inaczej w tym samym czasie ktoś inny może wstawić jednocześnie. Chyba nie ma innego wyjścia jak zrobić jednoczesne update lock_table set lock=lock i jeśli ktoś inny wstawi jednocześnie to transakcje zajdą na siebie dzięki temu sztucznemu update wyśietlając wyjątek "update conflict on concurrent update". Nie bardzo mi się podoba blokowanie całej tabeli która w niektórych wypadkach może być ogromniasta. Raczej zrobiłbym indeks unikalny na polu imię i w razie powtórnego wstawienia tego samego imienia pojawi się wyjątek bazy danych "key violation". Inna możliwość to dopuszczać powtarzanie imion i w razie potrzeby można policzyć powtórzenia poprzez grupowanie instrukcją SQL.

0

MySQL:

Robisz sobie tabelke "imiona", z dwiema kolumnami Imie, ilosc

Imie to klucz glowny, a ilosc ma default =1

I teraz myk polega na zapytaniu:

INSERT INTO `imiona`(`Imie`) VALUES ('Agnieszka')
  ON DUPLICATE KEY UPDATE ilosc=ilosc+1
0

chodzi mi o samo zapytanie, o żadne blokowanie tabel , tylko i wyłącznie zapytanie, jeśli oczywiście jest możliwośc wykonania takiego zapytania

0

@abc: dokładnie o coś takiego mi chodziło ;-) tylko że to działa jeśli imię jest kluczem głównym. a jeśli kluczem głównym jest id które musi się samo incrementować, co wtedy?

0
kaziuVBC napisał(a)

@abc: dokładnie o coś takiego mi chodziło ;-) tylko że to działa jeśli imię jest kluczem głównym. a jeśli kluczem głównym jest id które musi się samo incrementować, co wtedy?
A czemu ma nie działac jeśli zrobisz dodatkowy indeks unique na polu z imieniem?

0
kaziuVBC napisał(a)

@abc: dokładnie o coś takiego mi chodziło ;-) tylko że to działa jeśli imię jest kluczem głównym. a jeśli kluczem głównym jest id które musi się samo incrementować, co wtedy?

To moze Imie bedzie Unique i tez zadziala - ale musisz sprawdzic

0

na razie nie mam pola id, także działa aż miło ale przetestuje z uniqe i zobaczymy. dzięki wielkie za pomoc ;-)

1 użytkowników online, w tym zalogowanych: 0, gości: 1