Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] nieprzeczytane posty
Forum PHP.pl > Forum > PHP
1010
Witam,
Dostałem zlecenie napisania forum... I wszystko już ładnie działa i doszedłem do momentu w którym muszę sprawdzać czy dany post jest już przeczytany czy nie...

Jak takie coś wykonać optymalnie, aby nie generowało ogromnej ilości zapytań i żeby nie zasyfiało bardzo bazy danych?
Darti
W phpBB jest oddzielna tabela w bazie read_history, gdzie dopisywane są informacje kto przeczytał danego posta:
  1. CREATE TABLE `phpbb_read_history` (
  2. `user_id` mediumint(8) NOT NULL DEFAULT '0',
  3. `forum_id` smallint(5) UNSIGNED NOT NULL DEFAULT '0',
  4. `topic_id` mediumint(8) UNSIGNED NOT NULL DEFAULT '0',
  5. `post_id` mediumint(8) UNSIGNED NOT NULL DEFAULT '0',
  6. `post_time` int(11) NOT NULL DEFAULT '0',
  7. PRIMARY KEY (`user_id`,`forum_id`,`topic_id`,`post_id`,`post_time`),
  8. KEY `user_id` (`user_id`),
  9. KEY `forum_id` (`forum_id`),
  10. KEY `topic_id` (`topic_id`)
  11. )
em1X
nie musisz tego robić "w locie".. skorzystaj z cron'a.
Louner
Myslę, że najrozsądniej będzie zapisywać datę ostatniej wizyty usera na stronie, a potem oznaczyć jako nieczytane wszystkie te artykuły, które były napisane po tej dacie. Nie wymyśliłem jeszcze jak rozwiązać problem, kiedy nowy artykuł będzie napisany w momencie , gdy user przegląda stronę. biggrin.gif

Zrobiłem to tak:

Dodałem w bazie tabelę z użytkownikami online. Kiedy user wchodzi na stronę, skrypt sprawdza wpisy w tabeli z userami online i wywala wszystkie starsze niż 300 sekund, przy okazji zaznacza w ich profilach czas ostatniej wizyty jako moment wyrzucenia z listy online.

Jako nowe artykuły na wstępie zaznaczane są te, które zostały dodane ( lub skomentowane ) po czasie ostatniej wizyty usera.

Tabelę userów poszerzyłem o kolumnę 'czytane_artykuly'. Kiedy user wchodzi do artyukułu i jest on nieczytany, informacja o tym zapisywana jest do tabeli:

  1. <?php
  2. $czytane_arty[$id_artykulu][$data_wejscia];
  3. ?>


Data wejścia jest dodana z uwagi na komentarze. Jeśli ktoś skomentował artykuł po czasie zapisanym w tabeli znowu jest nieprzeczytany.

Tabelke od razu zapisuję do bazy w formie:
  1. <?php
  2. serialize($czytane_arty)
  3. ?>
, a odczytuję:
  1. <?php
  2. unserialize($czytane_arty)
  3. ?>


Kiedy user jest wymazywany z listy online, czyszczę pole 'czytane_artykuly' w bazie.

Przy okazji masz bajerek w postaci listy userów online. biggrin.gif

Pozdrawiam .winksmiley.jpg

To jest dokładna kopia mojego posta z tego tematu:
Temat: php Nieczytane posty artykuly
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.