Cytat(krowal @ 8.09.2009, 12:19:17 )

Robiłem coś takiego tylko że jeszcze bardziej skomplikowane niż na nk. Coś ala facebook z dodatkową możliwością komentowania powiadomień oraz oznaczenia czy się je lubi czy nie. Dodatkowo każdy user mógł usunąć sobie każde powiadomienie które widział i nie miało to wpływu na wyświetlanie go dla pozostałych userów którzy to powiadomienie również otrzymali, oraz... powiadomienia nie były dublowane w bazie !
Wszystko można zapisać jednorazowo i nie ma potrzeby powielać powiadomień. Później wystarczy tylko DOBRE zapytanie i będzie działać jak należy

Wskazówki:
- wybierasz wszystkie powiadomienia o akcjach które popełnili twoi przyjaciele (np WHERE user_id IN (friends_list)) więc w bazie do każdego powiadomienia musisz dopisać id usera który spowodował daną akcję
- możesz też dodawać powiadomienia globalne (dla wszystkich) wtedy user_id może być równe np null
- zamiast usuwać rekordy z tabeli powiadomień możesz dodać dodatkową tabelę gdzie będziesz zapisywał które powiadomienie zostało usunięte dla jakiego użytkownika i potem wybierać powiadomienia z warunkiem 'WHERE id_powiadomienia NOT IN (lista usuniętych powiadomień dla swojego usera)'
Dzięki temu całe wyświetlanie możesz zrobić jednym zapytaniem (+podzapytania) co jest fajne bo możesz je wszystkie posortować wg daty pojawienia się.
Wszystko spoko a co jak ma 2500 znajomych ?
Robimy: where user_id IN (2500 id)

Nie zebym byl pesymista ale... to moze zabic serwer?
1 zapytanie?
pobieramy liste friendsow ( przpuscmy 250 id)
potem pobieramy liste usunietych id
potem robimy zapytanie where id_user in(lista friendsow) and id_powiadomienia not in (usuniete powiadomienia).
Ja tu widze mase.
Moze ze zrobic to tak:
select * from powiadomienia as p,friend_list as fl,del_powiadomienia as dp where p.id_user=fl.id_friend and p.id!=dp.id_powiadomienia limit 30
Nie wiem czy to zapytanie w pelni dziala ale w sumie jesli tak to jednym zapytaniem mozna pobrac powiadomienia wszystkie ( nie wiem czy to zapytanie jest wydajne ale ... chyba wydajniejsze niz 50 insertow.
Nie wiem jak mysliscie to najlepsza droga czy moze jest lepsza?