Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php] nieprzeczytane posty
1010
post
Post #1





Grupa: Zarejestrowani
Postów: 749
Pomógł: 37
Dołączył: 3.10.2006

Ostrzeżenie: (0%)
-----


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?
Go to the top of the page
+Quote Post
Darti
post
Post #2





Grupa: Zarejestrowani
Postów: 1 076
Pomógł: 62
Dołączył: 6.03.2005
Skąd: Wroc

Ostrzeżenie: (0%)
-----


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. )
Go to the top of the page
+Quote Post
em1X
post
Post #3





Grupa: Zarejestrowani
Postów: 984
Pomógł: 41
Dołączył: 16.03.2002
Skąd: Płock

Ostrzeżenie: (0%)
-----


nie musisz tego robić "w locie".. skorzystaj z cron'a.
Go to the top of the page
+Quote Post
Louner
post
Post #4





Grupa: Zarejestrowani
Postów: 99
Pomógł: 5
Dołączył: 20.06.2005
Skąd: Bielsk Podlaski

Ostrzeżenie: (0%)
-----


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ę. (IMG:http://forum.php.pl/style_emoticons/default/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. (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif)

Pozdrawiam .(IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)

To jest dokładna kopia mojego posta z tego tematu:
Temat: php Nieczytane posty artykuly

Ten post edytował Louner 19.07.2007, 21:01:19
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 13.10.2025 - 22:53