[MySQL] Informacja o odwiedzonych wątkach na forum

0

Piszę skrypt forum i napotkałem pewien problem. Chciałbym aby zalogowani użytkownicy mogli, przeglądając forum, widzieć które wątki już odwiedzili, a które pozostały do odwiedzienie, ponieważ albo jest to nowy wątek, albo ktoś dodał nowego posta.
Ten system jest dostępny chyba we wszystkich forach. W tym także.
Jak to jest rozwiązane? Słyszałem, że można ściągnąć kod tego forum, ale nie chcę go przeglądać. Może ktoś wie jak to działa? Potrzebuje chociaż sugestię, ponieważ moje pomysły wydają mnie się dosyć mało wydajne dla większej ilości postów.

0

Można zastosować datowanie. Tj. Jeżeli temat, lub jego część jest młodsza od ostatniej wizyty usera wtedy zaznacz jako nieprzeczytane. :)

0

ale wtedy jak ktos nie przeczyta wszystkiego podczas jednej sesji to oznaczy sie jako przeczytane...

mozesz zrobic w mysql tabele zawierajaca 2 kolumny: id usera i numer postu... jesli user przeczyta posta to do tabeli dodaje sie wpis. Ale ostrzegam, ze przy duzej liczbie userow sporo to bedzie zajmowac :P

0

tabele zawierajaca 2 kolumny: id usera i numer postu

To brzmi ciekawie. Martwi mnie tylko ta, zresztą trafna, uwaga, dotycząca dużej liczy postów.
Mój pomysł wyglądał tak:

forum składa się z katalogów, to jest działów tematycznych (podobnie do 4programmers). Każdy katalog ma swoją tabelę w bazie. W tej tabeli są rekordy zawierające: tytuł, datę umieszczenia, autora, liczbę odpowiedzi, datę modyfikacji, identyfikator postu. Każdy post ma swoją tabelę, której nazwa jest tworzona w oparciu o jego numer (nazwa = "post" + id). W tej tabeli będą odpowiedzi na posta + pierwszy post, który napisał autor. Teraz sedno sprawy. W oparciu o id postu tworzy się tabelę zawierająca identyfikatory użytkowników, którzy dany post odwiedzili. Jeżeli post zostanie zmodyfikowany to tabela jest usuwana i w taki o to sposób system zapomina o dawnych odwiedzinach :) . No ale to na razie tylko teoria. Co o tym siądzicie?

0

z tego co napisales, to masz straszny balagan w strukturze bazy - jesli masz przykladowo 20 kategorii, to w bazie jest 20 tabel... duzo lepiej zrobic 2 tabele (w koncu MySQL to baza relacyjna czy jakos tak :P), w jednej lista kategorii (id kategorii; nazwa; inne bzdety), a w drugiej lista postow (id postu; id kategorii, w ktorej jest; tresc postu; autor; inne), potem wystarczy sobie polaczyc je w PHP poprzez id kategorii i wio ;)

tak samo z tabela odwiedzonych: zamiast tworzyc dla kazdego usera osobna tabele z odwiedzonymi tematami (ktora by mogla zawierac tylko jedna kolumne), czy dla kazdego tematu z lista userow, ktorzy je przejzeli (to dopiero bylby balagan), nalezy zrobic tabele o strukturze, ktora opisalem w poprzendim poscie, albo takiej [id tematu; id usera] i jak ktos odpowie na temat to nie jest usuwana tabela, ale tylko wszystkie wpisy o odpowiednim id tematu

EDIT:

lord_didger napisał(a)

Martwi mnie tylko ta, zresztą trafna, uwaga, dotycząca dużej liczy postów

po zastosowaniu podanego rozwiazania to dopiero bylby problem :P. A tak btw, to duzo to bedzie zajmowac, mysle ze dla ilosci postow rzedu 100000 i 1000 userow - wtedy jakby wszyscy wszystko przeczytali to tabela by zajela 20-50mb (10M wpisow, kazdy po 2-5 bajtow), chyba ze cos zle policzylem :D. Ale jesli dobrze to ta wielkosc bedzie niczym w porownaniu do wielkosci samej tabeli z postami

0

Sorry, ale totalnie nie czytałem wątku [czasu brak] - ale widzę dylemat, czy zapisywanie pary user-wątek dużo zajmie.
Taki sposób jest na 4p [plus dodatki].

Jest tabela coyote_topic_marking- oto jej statystyka:
rekordów: 145 455
rozmiar: 2 511 kB

dla przykładu:
tabela: coyote_post
rekordów: 188 377
rozmiar: 158 MB

0
lord_didger napisał(a)

Każdy post ma swoją tabelę, której nazwa jest tworzona w oparciu o jego numer (nazwa = "post" + id).

omg, tak się nie robi! poczytaj o relacyjnych bazach danych! albo w ogóle o bazach danych (patrz post tomkiewicza).
poza tym jeśli będziesz mieć kilka tysięcy postów, to zacznie nie wyrabiać się system plików trzymajacy bazę danych (MySQL: 1 tabela = 2,3 pliki).

1 użytkowników online, w tym zalogowanych: 0, gości: 1