Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] Problematyczne duplicate key przy update, update ... on duplicate key update
-tr3v0rr-
post
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
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
Go to the top of the page
+Quote Post
nospor
post
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
Go to the top of the page
+Quote Post
-tr3v0rr-
post
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
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 (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
-tr3v0rr-
post
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 (IMG:style_emoticons/default/sad.gif)
Go to the top of the page
+Quote Post
-tr3v0rr-
post
Post #7





Goście







Już mam (IMG:style_emoticons/default/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
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 12:41