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. )


--------------------
The answer is out there, Neo. It's looking for you. And it will find you, if you want it to.
SERVER_SOFTWARE : Apache/2.2.4 (Win32) PHP/5.2.1
MySQL Client API version : 5.0.27
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.


--------------------
eh, co polska wódka to polska wódka
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ę. 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

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
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 21.08.2025 - 09:14