![]() |
![]() |
![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 726 Pomógł: 20 Dołączył: 8.12.2005 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Zastanawiam się w jaki sposób oznaczać nieprzeczytane wiadomości użytkowników.
Teoretycznie można oznaczać przeczytane w pliku cookie usera. Ale zastanawiam się jakie znacie inne rozwiązania, bo przy tym użyciu cookie pojawia się problem nie akceptowanie przez przeglądarki i ew. utrata pliku. Zastanawiam się czy nie lepiej było by to ewidencjonować w bazie, ale to ozacza że każdy użytkownik musi miec swoją tabelę. Choć wydaje się to dość proste, bo oznacza realnie jednego select i jednego inserta, ale generuje pewne obciążenie jeżeli mamy paruset usererów i przy tym paredziesiątysięcy postów. Bo oznacza to pareset tabel. Ten post edytował Wykrywacz 27.02.2007, 16:00:39 |
|
|
![]() |
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 656 Pomógł: 3 Dołączył: 26.10.2005 Skąd: Częstochowa Ostrzeżenie: (0%) ![]() ![]() |
hmm skoro nei chesz bazy w której zapisywałbyś w kolumnie czyt. 1 lub 0 to może TXT dla każdgo usera? czyli każdy uzytkownik ma swojego txt, który przy logowaniu użytkownika zapisywał by się w jego sesji lub cookie.Nie może być na stałe w cookie bo ktoś może sobie wyczyścić je ;P
-------------------- zmoderowano - waga i rozmiar
|
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 726 Pomógł: 20 Dołączył: 8.12.2005 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Ale twój txt, sprowadza się do funkcjonalności cookie. Już pomijam że połowa serwerów odrzuciła by mi próbę zapisania czegokolwiek( a w każdym razie tam gdzie jest proxy).
Możesz przedstawić jak widział byś zapis w takim razie w bazie, tak żeby nie tworzyć tabeli dla każdego usera. Zastanawiam się nad tym, aby zrobić tak, że w bazie wrzucam pole powiedzmy id sesji, nieważne. Teraz, przy loginie itp. jest to pole id sesji. Które ma zapisany ostatni ID posta. Jeżeli user patrzy na ostatnie posty no to wywietlam mu to przez for i daje $i > id_sesji;$i<aktualne_max_id;i++. To dało by banalny rezultat. Tyle że nie mam pojęcia jak oznaczyć jeżeli user powiedzmy z 9 nieprzeczytanych przeczyta tylko 5, tak aby przy następnym logowaniu pokazało mu 4 których nadal nie przeczytał. Edit: I tak samo nie da się używając tego, podkreślić czy to przez zmianę ikonki czy cokolwiek, że danych post jest nieprzeczytany. Ten post edytował Wykrywacz 27.02.2007, 17:50:14 |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 78 Pomógł: 1 Dołączył: 16.08.2006 Skąd: szy-ły Ostrzeżenie: (0%) ![]() ![]() |
moim zdaniem kazdy user musiałby w swojej tablicy miec liste artykułów/postów i obok zmienna 0/1 czy przeczytal czy nie. chyba nie ma innej opcji zapisania tego dla kazdego uzytkownika osobno, bo kazy odwiedził inne tematy wiec informacje powinny byc zapisywane osobno. choc moge sie mylic
![]() |
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 1 033 Pomógł: 125 Dołączył: 17.09.2005 Skąd: Żywiec Ostrzeżenie: (0%) ![]() ![]() |
No i nie trzeba osobnych tabel dla każdego użytkownika. Można użyć czegoś w rodzaju:
Kod +------+-----------+---------------+ | ID | user_id | unread_post | +------+-----------+---------------+ | 1 | 4 | 2341 | | 2 | 4 | 2342 | | 3 | 4 | 2502 | | 4 | 13 | 2342 | (...) A dla niezalogowanych użytkowników możesz zastosować prostą metodę z cookie. Wysyłać ciastko z aktualną datą i podczas kolejnych odwiedzin odznaczać posty napisane później niż data_w_cookie jako nieprzeczytane. -------------------- "Sumienie mam czyste, bo nieużywane."
|
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 726 Pomógł: 20 Dołączył: 8.12.2005 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Kicok czy możesz przybliżyć na jakiej zasadzie miały by być umieszczane te user_id, bo nie qumam.
Uznajmy że niezalogowani wogóle mnie nie interesuje ![]() |
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 148 Pomógł: 0 Dołączył: 31.05.2006 Ostrzeżenie: (0%) ![]() ![]() |
no to jak cie nie interesuja niezarejestrowani to luz robisz sobie tabelke userow i dajesz im post_read
![]() ![]() ![]() ![]() -------------------- Pozdrawiam
kriqs mam nadzieje ze pomoglem :) |
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 726 Pomógł: 20 Dołączył: 8.12.2005 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
No właśnie szukam podobnego rozwiązania. Jak pisałem userów mam około 400 i ta liczba jest raczej stała, bo nie używane konta wylatują. Postów jest ze 20k. A interesuje mnie znalezienie rozwiązania które pozwalało by na to aby (tak jak tu i na phpbb+przemo), nieprzeczytane posty cały czas były nieprzeczytanymi. (znaczy się żeby te których się fizyncznie nie otworzy, aby się nie odznaczały).
|
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 78 Pomógł: 1 Dołączył: 16.08.2006 Skąd: szy-ły Ostrzeżenie: (0%) ![]() ![]() |
tylko Kicok co to za dane w kolumnie user_id oraz unread_post?? szczegolnie to unread_post mnie interesuje co to za liczpa i na jakiej zasadzie mialaby byc generowana? bo rozumiem ze nie chodzi o rozwiazanie typu - ktos wchodzi na forum i automatycznie wsyztskie posty odznaczaja sie jako przeczytane, tylko dopiero po wejsciu w dany post ? tak?
|
|
|
![]()
Post
#10
|
|
![]() Grupa: Zarejestrowani Postów: 726 Pomógł: 20 Dołączył: 8.12.2005 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Dokłanie mysz0n do tego zmierzam. I też nie rozumiem zasady tej tablicy którą Kicok wypisał
|
|
|
![]()
Post
#11
|
|
![]() Grupa: Przyjaciele php.pl Postów: 1 590 Pomógł: 40 Dołączył: 11.01.2007 Skąd: Centrum Ostrzeżenie: (0%) ![]() ![]() |
Jak dla mnie struktura tablicy Kicoka jest prosta jak budowa gwoździa.
ID - tłumaczyć nie trzeba ID_USER - jak wyżej UNREAD_POST - id nieprzeczytanego posta. W momencie jak użytkownik wchodzi w post wykonuje się zapytanie do tej tabeli i dany wiersz zostanie usunięty. Raz na jakiś czas tablica będzie czyszczona ( z komunikatem do usera, np zaraz po zalogowaniu , że liczba nieprzeczytanych postów osiągnęła wartość XXX i wszystkie zostaną oznaczone jako przeczytane ). -------------------- 404
|
|
|
![]()
Post
#12
|
|
![]() Grupa: Zarejestrowani Postów: 726 Pomógł: 20 Dołączył: 8.12.2005 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
hmm, ale to oznacza, że jeżeli jest tworzony nowy post.
to pojawia się nagle 400 rekordów w bazie (przy 400 userach). Czy to nie za dużo jak na jednorazowy wpis. Zakładając, że aktywnych z 400 jest na bieżąco powiedzmy 100. To wielkość tabeli, jaka się rozrasta to w tym momencie, 300*1000 (1000 to ilość powiedzmy nieprzeczytanych postów po której następuje skasowanie starych wiadomości) co daje nam sumę 300tyś wpisów + te bieżące. Wydaje mi się trochę mułowate jak na Tylko 400 użytkowników. Ten post edytował Wykrywacz 1.03.2007, 11:48:22 |
|
|
![]()
Post
#13
|
|
![]() Grupa: Zarejestrowani Postów: 1 033 Pomógł: 125 Dołączył: 17.09.2005 Skąd: Żywiec Ostrzeżenie: (0%) ![]() ![]() |
Niekoniecznie trzeba od razu wstawiać tam te wpisy po napisaniu posta. Na pewno masz gdzieś w bazie danych zapisaną datę ostatniej aktywności użytkownika. Gdy użytkownik zaloguje się ponownie odczytasz tą datę i wszystkie nowsze posty dopisujesz do tej tabeli jako nieprzeczytane.
Można też zrobić jakiś limit czasowy, np. tydzień. Jeśli ostatnie logowanie użytkownika nastąpiło 1;2;3;4;5;6;7dni temu, to wszystkie nowsze posty dopisujesz do tej tabeli. Jeśli więcej niż 7 dni temu, to dopisujesz tylko posty z ostatniego tygodnia, a całą resztę użytkownik będzie widział jako przeczytane, chociaż niekoniecznie tak musiało być. Natomiast jeśli jakiś użytkownik uzna twoje forum za nieciekawe i już go nigdy nie odwiedzi, to przynajmniej nie będzie zatruwał bazy danych wpisami o nieprzeczytanych postach. Sposób wymyślony na poczekaniu, więc być może ktoś już wymyślił coś prostszego i skuteczniejszego. Trzeba poszperać po kodach źródłowych for dyskusyjnych. -------------------- "Sumienie mam czyste, bo nieużywane."
|
|
|
![]()
Post
#14
|
|
Grupa: Zarejestrowani Postów: 78 Pomógł: 1 Dołączył: 16.08.2006 Skąd: szy-ły Ostrzeżenie: (0%) ![]() ![]() |
a czy nie ma tu żadnych userów phpbb ? jak tam to jest rozwiazane?
|
|
|
![]()
Post
#15
|
|
Grupa: Zarejestrowani Postów: 1 447 Pomógł: 191 Dołączył: 26.03.2008 Ostrzeżenie: (0%) ![]() ![]() |
odświeżam temat, również chciałbym osiągnąć ten sam efekt
ja myślałem nad takim rozwiązaniem (które już było przedstawione) że są 3 kolumny id, user_id, unread_post z tym że jak ktoś słusznie zauważył - po napisaniu posta tworzy sie tyle rekordów co ilość użytkowników inna możliwość (którą sami ocencie, niewiem czy wypali) do tabeli userów dodać kolumne unread_posts, i dodawać do niej po przecinku id postów, wtedy zapytanie będzie jedno
objaśnienie do zapytania : 1. niewiem czy [unread_posts`=`unread_posts`+',(id_posta)' to prawidłowe łączenie stringów w sql, jeśli nie to poprawcie. 2. `user_id`!=(id_uzytkownika_piszacego_post) - zaladam że user który właśnie wysłał post automatycznie go przeczytał. korzystanie z takiej bazy nie przeczytach postów: pobieranie wiersza, następnie rozdzielenie na tablicy przy pomocy
i dalej już chyba wiadomo teraz po wejściu do każdego tematu, (zakładam że id postów są w tablicy $posts_id)
-nie jestem pewny czy tego typu odejmowanie tablicy od tablicy jest prawidłowe i zapytanie
-------------------- :)
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 20.08.2025 - 19:03 |