Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Dodawanie zduplikowanych danych
zelu
post
Post #1





Grupa: Zarejestrowani
Postów: 229
Pomógł: 34
Dołączył: 7.12.2008
Skąd: Poznań

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


Witam,

kieruję do bazy następujące zapytanie:

  1. INSERT INTO messages_users( message_id, user_id ) SELECT id, {$user_id} FROM messages WHERE channel_id = {$channel_id}


Dodatkowo mam założone UNIQUE na (message_id, user_id).

Jest to zapytanie oznaczające wszystkie wiadomości w danym kanale jako przeczytane.

Wszystko działa fajnie do czasu kiedy w bazie jest już unikatowa para (message_id, user_id). Wtedy co naturalne serwer wyrzuca błąd. I teraz moje pytanie: czy da się jakoś zgrabnie to obejść bez uprzedniego sprawdzania czy podane wartości są już w bazie?
W MySQL jest ON DUPLICATED KEY. Niestety w postgresie nic takiego nie znalazłem.


Pozdrawiam
Go to the top of the page
+Quote Post
Zbłąkany
post
Post #2


Administrator serwera


Grupa: Developerzy
Postów: 521
Pomógł: 13
Dołączył: 2.04.2004
Skąd: 52°24' N 16°56' E

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


Coś mi śmierdzi w Twojej wypowiedzi. Jak masz klucz UNIQUE na dwóch kolumnach, to niemożliwe jest, byś posiadał w tabeli dwa lub więcej rekordów z powtórzoną kombinacją jednego z nich, bądź obu na raz (zajrzałbym tutaj, a także przeczytałbym jeszcze to ze szczególnym uwzględnieniem punktu 11.8) (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
zelu
post
Post #3





Grupa: Zarejestrowani
Postów: 229
Pomógł: 34
Dołączył: 7.12.2008
Skąd: Poznań

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


Wiadomości wyświetlam w 2 miejscach. W sidebarze i w widoku całego kanału. Przy czym w sidebarze widoczne są tylko nieprzeczytane wiadomości, a w widoku kanału można przeczytać wszystkie wiadomości (nawet jeśli były wcześniej oznaczone jako przeczytane) należące do danego kanału. Dodatkowo w sidebarze można oznaczyć konkretną wiadomość jako przeczytaną, a w widoku kanału mam dodatkowo przycisk "Oznacz wszystkie jako przeczytane", który wywołuje zapytanie z mojego wcześniejszego postu i powoduje błąd, bo w tabeli messages_users są już wcześniej przeczytane w sidebarze wiadomości (IMG:style_emoticons/default/smile.gif)
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 - 08:51