Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL] 'ON DUPLICATE KEY UPDATE' - jak otrzymać id zmodyfikowanych rekordów?
kiler129
post
Post #1





Grupa: Zarejestrowani
Postów: 566
Pomógł: 35
Dołączył: 21.06.2006

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


Witjacie!
Problem jest dość prosty. Wykonuje zapytanie "INSERT INTO x ON DUPLICATE KEY UPDATE...". Tabela ma klucz unique na pola A oraz B. Kluczem primary z auto increment jest C.
Po wykonaniu zapytania chciałbym w jakiś sposób dowiedzieć się jakie wartości C miały zmodyfikowane rekordy (czyli te które były już w tabeli i zostały zmodyfikowane a nie dodane).
Brzmi jak przekombinowana idea ale taką nie jest - schemat wygląda tak, że użytkownik wyszukuje coś, dostaje wyniki z lokalnej bazy a dodatkowo są "doładowywane" wyniki z zewnętrznego serwera. Aby nie pytać go znowu o to samo dodaje te wyniki do lokalnej bazy jednakże dane są niepełne - crontab co 24h dodatkowo przelicza pewne wartości i dodaje dodatkowe informacje w drugiej tabeli kluczownej po owym C (IMG:style_emoticons/default/smile.gif)
Uff, ale się rozpisałem - mam nadzieję, że ktoś dobroduszny przeczyta i podpowie (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
pmir13
post
Post #2





Grupa: Zarejestrowani
Postów: 282
Pomógł: 89
Dołączył: 12.04.2011

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


Sam ID zwraca nam mysql_insert_id(), tylko trzeba było najpierw wiedzieć czy było wstawienie, czy update, bo ta funkcja zwraca id w obu przypadkach.
Czyli przykładowy kod:
  1. $query = "INSERT INTO licznik_postow ( id_autora, ile ) VALUES ( $id_autora, 1 ) ON DUPLICATE KEY UPDATE ile=ile+1";
  2. $res = mysql_query( $query ) or die( mysql_error() );
  3.  
  4. $affected = mysql_affected_rows();
  5.  
  6. if( $affected == 2 )
  7. $id_update = $id; // bylo update
  8. elseif( $affected == 1 )
  9. $id_insert = $id; // byl insert
  10. else
  11. // blad
Go to the top of the page
+Quote Post

Posty w temacie


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: 7.10.2025 - 13:27