Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] Problematyczne duplicate key przy update, update ... on duplicate key update
-tr3v0rr-
post 20.07.2013, 08:06:33
Post #1





Goście







Witam,

Mam napisany system w którym co minutę cron sprawdza zapisane w bazie adresy i jeżeli jest tam przekierowanie to robi update adresu, jednak wymagania systemu sa takie ze adresy musza byc unikalne tak wiec jak aktualizujac adres cron podmieni go na juz istniejacy nie moze wykonac zapytania i system sie "zawiesza" na tym adresie. Dla takich przypadkow chcialbym dac np, status "duplikat" i nie zmieniac tego adresu, napewno nie moge go usunac. Przydaloby sie update ... on duplicate key update ale takiego czegos nie ma, moglbym sprawdzac najpierw czy taki adres istnieje juz w bazie ale to by dodalo od 20 do 100 dodatkowych zapytan na minute czego wolalbym uniknac jesli sie tylko da, baza docelowo bedzie zawierala okolo milion adresow. Macie moze jakis pomysl ?

Pozdrawiam
Trevor
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 6)
gothye
post 20.07.2013, 17:28:41
Post #2





Grupa: Zarejestrowani
Postów: 702
Pomógł: 65
Dołączył: 16.03.2009

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


wiec za nim wykonasz UPDATE , zrób SELECT i sprawdź istnienie możliwego duplikatu w bazie


--------------------
Nie udzielam pomocy poprzez PW
Go to the top of the page
+Quote Post
nospor
post 21.07.2013, 19:26:36
Post #3





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




Cytat
moglbym sprawdzac najpierw czy taki adres istnieje juz w bazie ale to by dodalo od 20 do 100 dodatkowych zapytan na minute czego wolalbym uniknac jesli sie tylko da

No to rob update jak do tej pory, a w sytuacji gdy ten update sie nie powiedzie to sprawdz numer bledu. Jesli to bedzie numer odpowiadajacy za duplikacje, to wowczas oznacz ten rekord jako duplikat. Wowczas dodatkowe zapytania bedziesz robil tylko dla duplikatow a nie dla wszystkich


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
-tr3v0rr-
post 21.07.2013, 22:01:04
Post #4





Goście







@nospor jestes genialny, nie wiedzialem ze tak mozna. Moglbys mi podpowiedziec jeszczcze jak albo czego szukac w google zeby sprawdzic jakie sa kody bledow oraz jak je sprawdzac ? pozdrawiam goraco
Go to the top of the page
+Quote Post
nospor
post 21.07.2013, 22:03:48
Post #5





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




Nie wiem czego uzywasz do obslugi bazy, ale jesli mysql_query, to blad zapytania zwroci ci mysql_errno()
http://pl1.php.net/manual/en/function.mysql-errno.php

Zas kody bledow sa w dokumentacji mysql. Poza tym mozesz sobie zobaczyc jaki numer bledu zwroci ci mysql_errno dla duplikatu i bedziesz wiedzial smile.gif


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
-tr3v0rr-
post 22.07.2013, 08:39:09
Post #6





Goście







Uzywam PDO, skonstrulowalem zapytanie w ten sposob:
  1. try {
  2.  
  3. $zapytanie = $db -> prepare('update `baza` set `link`=:link where `id`=:id limit 1');
  4.  
  5. $zapytanie -> bindValue(':link', $last_url, PDO::PARAM_STR);
  6. $zapytanie -> bindValue(':id', $name, PDO::PARAM_INT);
  7. $zapytanie -> execute();
  8.  
  9. echo 'Niby wszystko ok';
  10.  
  11. }catch(PDOException $e){
  12. echo 'wystapil blad: '.$e->getMessage();
  13. }


Wyskakuje "Niby wszystko ok" a zapytanie sie nie update'uje sad.gif
Go to the top of the page
+Quote Post
-tr3v0rr-
post 22.07.2013, 08:49:23
Post #7





Goście







Już mam smile.gif

$blad = $zapytanie -> errorInfo();
if ($blad[1] == 1062){
echo 'wpis zostal zduplikowany';
}
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 24.07.2025 - 21:17