Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [mySQL] Uniknięcie dodawania duplikatów
Qwak
post
Post #1





Grupa: Zarejestrowani
Postów: 21
Pomógł: 0
Dołączył: 29.04.2009

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


Hej!
Chcę podczas dodawania nowego rekordu do bazy sprawdzić od razu czy taki już nie istnieje. Mam jedną kolumnę w pełni unikalną (inną od id ;-) ) i to po niej chciałbym sprawdzać. Czy istnieje inne rozwiązanie niż SELECT i sprawdzenie ilości odpowiedzi?
Pozdrawiam i proszę o pomoc,
QWAK
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 9)
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 565
Pomógł: 6315
Dołączył: 27.12.2004




no jeśli założysz uniq na to pole, to przy dodawaniu tego samego mysql ci wypluje błąd - na tej podstawie będziesz wiedział że już jest.
No a drugie rozwiązanie to select. nie wiem w czym ci on przeszkadza.
Go to the top of the page
+Quote Post
Qwak
post
Post #3





Grupa: Zarejestrowani
Postów: 21
Pomógł: 0
Dołączył: 29.04.2009

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


W moim przypadku będę generować zamiast 20 zapytań "tylko" 10 (IMG:style_emoticons/default/smile.gif)
Ok, dzięki za odpowiedź.
Go to the top of the page
+Quote Post
nospor
post
Post #4





Grupa: Moderatorzy
Postów: 36 565
Pomógł: 6315
Dołączył: 27.12.2004




To dziwne masz te dodawanie ze generuje ci az 10 zapytan (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
Qwak
post
Post #5





Grupa: Zarejestrowani
Postów: 21
Pomógł: 0
Dołączył: 29.04.2009

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


Nie dziwne (IMG:style_emoticons/default/winksmiley.jpg) Po prostu muszę dodać 10 nowych rekordów do jednej tabeli.
Go to the top of the page
+Quote Post
nospor
post
Post #6





Grupa: Moderatorzy
Postów: 36 565
Pomógł: 6315
Dołączył: 27.12.2004




No chyba że tak (IMG:style_emoticons/default/winksmiley.jpg)
UNIQ wydaje się tu być właściwym rozwiązaniem. Pamiętaj tylko, by patrzeć jaki dostajesz błąd. Mysql może zwrócić ci różne błędy, nie tylko że próbujesz dodać coś co już istnieje.
Go to the top of the page
+Quote Post
Qwak
post
Post #7





Grupa: Zarejestrowani
Postów: 21
Pomógł: 0
Dołączył: 29.04.2009

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


Tak, też o tym myślałem. Jeszcze raz wielkie dzięki za pomoc.
Go to the top of the page
+Quote Post
maly_swd
post
Post #8





Grupa: Zarejestrowani
Postów: 744
Pomógł: 118
Dołączył: 14.02.2009
Skąd: poziome

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


a jak by dac to:
  1. INSERT INTO TABLE (a,b,c) VALUES (1,2,3)
  2. ON DUPLICATE KEY UPDATE c=c;
Go to the top of the page
+Quote Post
nospor
post
Post #9





Grupa: Moderatorzy
Postów: 36 565
Pomógł: 6315
Dołączył: 27.12.2004




@maly_swd rozwiązanie co zaproponowales spowoduje, ze w momencie duplikatu nie dostaniemy błędu.A chodziło o to by błąd dostać i na tej podstawie wiedzieć, że duplikat miał miejsce (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
maly_swd
post
Post #10





Grupa: Zarejestrowani
Postów: 744
Pomógł: 118
Dołączył: 14.02.2009
Skąd: poziome

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


Nospor -> faktycznie, moj blad...

Ale jak by po tym sprawdzic mysql_affected_rows - z tego co pamietam zwraca ona liczbe przetworzonych wierszy a w przypadku gdy update nie zmienil wiersza c=c (czyli nie zmienil) dostaniemy 0 - czyli ze byl duplikat:)

- to teoria oczywiscie wymyslona przy kawie

Ten post edytował maly_swd 31.08.2010, 09:53:38
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 10.06.2026 - 11:14