Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Optymalna Reprezentacja nieprzeczytanych postów
Forum PHP.pl > Forum > Bazy danych > MySQL
mierzeju
Ostatnio planuje pisanie własnego skryptu forum. I tu nie mogę zdecydować w jaki sposób reprezentować dane żeby było optymalnie ale i bardzo funkcjonalnie.

Pierwsze rozwiązanie.
Tak jak jest w phpbb by przemo: tabela z postID | topicID | userID | date. Niby wszystko fajnie łatwo można uzyskać informacje ile ma się wszystkich nieprzeczytanych postów, gdzie po ile etc.... Tylko jak mamy forum 10 000 userów i do tego np limit 500 postów nieprzeczytanych dla każdego to mamy 5 milionów wpisów w tabeli.... A każdy nowy post to insert do tabeli o wielkości ilości użytkowników.

Drugie rozwiązanie
Chyba tak jest w phpBB3 nie ma tej tabeli wcale. I nowe posty sprawdza się przez datę ostatniej wizyty w porównaniu z datami postów. I tu jest problem bo jak się wylogujemy i zalogujemy ponownie to już nie mamy dostępu do tych których nie przeczytaliśmy. Dodatkowo tam jest jakiś system który zapisuje datę ostatniego wyświetlenia danego tematu. I jest problem jak rozwiązać np przeczytanie kilku pierwszych stron tematu a reszty nie.... I liczenie nieprzeczytanych postów w poszczególnych tematach(kilku) w tym sposobie byłoby chyba poprzez wywoływanie kilku zapytań...

Chciałbym mieć system który to będzie dobrze liczył m.in. link "nieprzeczytanych postów [ilosc]" i spisy tematami z ilością nieprzeczytanych postów w nich, do tego pamiętanie tego niezależnie od daty ostatniego logowania. Coś o zapisywaniu w cookie też się nasłuchałem ale chciałbym żeby rozwiązanie działało nie tylko na jednym kompie.

Jeśli zastanawiał się ktoś na rozwiązaniami tego problemu, albo orientuje się jak to jest zorganizowane w innych skryptach for, bardzo prosiłbym o pomoc.
thek
Ja osobiście uważam, że najlepsze jest rozwiązanie zaproponowane przez Ciebie jako drugie. Użytkownicy bowiem przeglądają te tematy, które ich interesują, a resztę olewają. Dlatego jakiekolwiek przechowywanie informacji o wszystkich nowych postach mija się z celem. Dodatkowo nieaktywni użytkownicy lub logujący się raz na jakiś czas cały czas niemal mają 500 postów. A to zazwyczaj ponad połowa zarejestrowanych. Dodatkowo na ich rzecz jest ciągle wykonywana akcja zwalniania z tabeli postów powyżej limitu, więc mimo iż nie odwiedzają strony to ją obciążają. Dlatego najlepsze moim zdaniem rozwiązania to:
a) zaznaczyć DUŻYMI LITERAMI przy wchodzeniu na forum i przy rejestracji, że postów nowych NIE oznaczasz i trzeba do tematu zrobić subskrypcję,
cool.gif przy wchodzeniu na forum porównywać daty postów z datą ostatniego logowania i zwracać te, które są większe, ale z datą nie dalszą niż 2-4 tygodnie.
Jak zaznaczyłem, preferencje userów są wybiórcze i większość linka "Oznacz wszystkie fora jako przeczytane" chyba nie używa bo posty im ciągle w granicach 100-200 wiszą, nawet po zalogowaniu i przejrzeniu tematów. Dlatego lepiej niech dzieje się to wszystko automatycznie.
Myślę, że b jest lepszy. Tworzona by była tabela, w której przechowywano by tematy z numerem ostatniego postu. Jeśli ktoś by dopisał nową wiadomość w wątku jakimś, to automatycznie sprawdzana by była ta tabela i zmieniała by się wartość ostatniego posta dla tego tematu. Wątek byłby dodawany osobom obecnie zalogowanym. Kasowany byłby z tej tabeli jeśli user albo odwiedził temat, albo był na ostatniej stronie tematu. No i przy wylogowywaniu wszystkie wpisy w niej tyczące tego usera też by szły na śmietnik.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.