![]() |
![]() |
![]() ![]()
Post
#1
|
|
Grupa: Developerzy Postów: 823 Pomógł: 12 Dołączył: 18.12.2005 Ostrzeżenie: (0%) ![]() ![]() |
Witam.
Ostatnio postanowiłem napisać sobie system powiadomień w serwsie. Proste powiadomienie to przypisanie rekordu użytkownikowi. Zaawansowane natomiast to takie, które jes rozsyłane do wszystkich przyjaciół uzytkownika. No wiadomo, nie będę rozsyłał d wszystkich userów po rekordzie, tylko rozpiszę tabelę trochę inaczej. Oto jej s ruktura: (klucz notice_owner napisany testowo)
Opis pól (ważniejszych): notice_owner - "posiadacz" powiadomienia notice_user - id user na temat którego jest powiadomienie Wykorzystanie.
PIERWSZE (unia):
(wykorzystane wszystkie klucze, oprócz notice_owner bo tego zapytania się on nie tyczy. Wyskakuje EXTRA w unii: Impossible WHERE noticed after reading const table...) DRUGIE (z wykorzystaniem OR):
(tutaj nie korzysta się z klucza notice_owner) Pytania: a ) które zapytanie jest bardziej optymalne (proszę wziąć pod uwagę brak wykorzystania klcza w OR, jeżeli da się go jakoś zbudować, to jak) b ) niepokoi mnie komunikat w EXTRA przy pierwszym zapytaniu dla unii: Impossible WHERE noticed after reading const table... Dziekuję za wypowiedzi. |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 793 Pomógł: 32 Dołączył: 23.11.2006 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Właśnie czytam i jakoś nie do końca rozumiem. Powinieneś najpierw napisać co ma być robione (tak dla laików) a potem sposób w jaki chcesz rozwiązać to. Bo nie jestem pewien czy dobrze zrozumiałem.
A nie możesz tego rozbić? Czyli stworzyć coś co trzyma relacje użytkownik - przyjaciele, czy ogólniej użytkownik - powiadomienie. Takie user_id,notice_id,type_id... Wtedy indeks na user_id i dwukolumnowy na user_id i type_id, aby móc wybrać tylko danego typu powiadomienia. Jeśli ma być ważna data to też dodać i zineksować. To taka tabela służąca do wyszukania elementów, gdy masz tylko te co potrzebujesz dołączasz dopiero dane (nieważne przy wyszukiwaniu a najczęściej sporo ważące). |
|
|
![]()
Post
#3
|
|
Grupa: Developerzy Postów: 823 Pomógł: 12 Dołączył: 18.12.2005 Ostrzeżenie: (0%) ![]() ![]() |
Sęk w tym, że przy warunku OR:
Dla przypadków połączonych tą klauzulą: a ) po notice_owner = ID_USERA_POWIADAMIANEGO b ) po notice_owner = 0 i notice_self = 1 i notice_user IN( PRZYJACIELE_USERA_POWIADAMIANEGO ) , nie wykorzystywany jest żaden z wyżej wymienionych (które podałem w załączonych listingach) kluczy (badane EXPLAIN) |
|
|
![]() ![]() |
![]() |
Aktualny czas: 22.08.2025 - 18:25 |