Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Przeczytane rekordy
Forum PHP.pl > Forum > PHP
szczawik
Witam,

Macie pomysł jak napisać skrypt, który będzie oznaczał te rekordy w bazie mysql, które użytkownik już widział i nie chce ich ponownie wyświetlać?
Mogłbym utworzyć nową tabelę i tam dodawać każdy rekord ze statusem przeczytane, ale takich rekordów będzie 1000 dla jednego użytkownika więc starsznie dużo tego wyjdzie.

Chodzi mi o coś w style jak np. na forach jest. Oznacz temat jako przeczytany itp.

Z góry dzięki za pomoc wink.gif
nivius
Dodaj tabele wiele do wielu z id czegoś tam i id użytkownika. Sprawdź zapytaniem do tej tabeli po id użytkownika i id elementu czy użytkownik już to czytał jak nie to dodaj rekord.
szczawik
No tak, napisałem to w pierwszym poście.

Nie wydaje mi się ono dobre. Będzie zawalać bazę wink.gif
thek
Bo takie rozwiązanie się zawsze optymalizuje. To nie tak, że co sekundę się wali userowi coś do bazy wink.gif Najczęściej takie działania są robione tylko podczas interakcji usera ze skryptem. Po co zawalać tę bazę dla usera, który nie zalogował się od pół roku? Takie coś się robi gdy się on w końcu zaloguje i gdy odwiedza stronę gdzie informacja o nowych jest widoczna. Dodatkowo ustawia się limity. Aplikacja przechowuje ostatni czas aktywności usera i sprawdza, czy w międzyczasie nie pojawiły nowe posty. Jeśli są - dokłada te informacje do puli. Wszystko ponad limit wylatuje. Dodatkowo wszystkie nowe posty które user widzi po wejściu na stronę są usuwane z puli lub, co także częste, wszystkie posty z odwiedzonego tematu są uznawane za przeczytane. Można kombinować w inne strony, ustalając limity na kilka wariantów (albo limit postów, albo tematów czy też dni/godzin wstecz) i wybierając najbardziej odpowiadający nam.
szczawik
Zgadza się. W przypadku forum jest to dość proste.

W moim przypadku w tabeli jest 1000 wyrazów. Każdy użytkownik będzie dążył do tego, aby wyświetlało mu się coraz mniej tych wyrazów. I tu mam problem jak to najlepiej rozwiązać wink.gif
thek
Może więc zorganizuj to w formie listy priorytetów lub coś w ten deseń? Nie ma to chyba swojej właściwej nazwy, więc taką zaproponowałem i rozwinę swoją myśl. Stwórz wyrazom pewną wartość startową i utwórz powiązanie wiele do wielu między wyrazami a użytkownikami. Każde wyświetlenie wyrazu odejmuje określoną wartość od obecnej (dla danego użytkownika). Każde kliknięcie w dany wyraz zwiększa tę wartość i zapewne przenosi na odpowiednią stronę. Można też potem zrobić statystyki "globalne" dla danego wyrazu, by widzieć szacunkową "wartość" wyrazu. Jeśli zdecydujesz się na rozwiązanie w stylu chmury tagów, możesz też dodać działanie odwrotne - kliknięcie na krzyżyk obok wyrazu usuwa go i dodatkowo odejmuje ileś od wartości obecnej. Takie specyficzne podejście do guzików "Lubię - nie lubię". Co nam to daje? Klikane wyrazy zwiększają swoją wartość. Nowe wyrazy mają ją wysoką i też się pojawiają. Wyrazy ignorowane zmiejszają wartość, aż w końcu mają ją tak niską, że przestają się wyświetlać. Poniżej pewnej wartości progowej mogą wylecieć całkiem dla danego usera. Wyrazy celowo usuwane znikają niezwykle szybko z widoku i bazy. Zawsze wybieraj ileś wyrazów z wysoką pozycją i ileś losowych spośród pozostałych. W ten sposób user zawsze będzie widział swoje lubiane wyrazy oraz co rusz jakiś nowy.
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.