![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 655 Pomógł: 73 Dołączył: 2.05.2014 Ostrzeżenie: (0%) ![]() ![]() |
Witam
Tworze swoj pierwszy projekt w php z wykorzystaniem mysql. W tej chwili rozgryzam jak najlatwiej informowac danego uzytkownika, ze od jego ostatniej wizyty w danym temacie lub artykule sa nowe, nie czytane komentarze/posty. Wpadlem na kilka pomyslow odnosnie "flagowania" w bazie np: 0 umieszczane w tabeli user w momencie wyslania nowego artykulu, i nastepnie w momencie jego wyswietlenia przez danego uzytkownika wyslanie "1" w to miejsce. Jednak to jest bezsensu.. Kazdy artykul czy temat to nowe kolumny. Obecnie jestem na urlopie i pisze z telefonu, nie moge sobie testowac nic, jednak nie daje mi to spokoju, mysle nad rozwiazeniem juz od wczoraj, a php ucze sie dopiero od 2 miesiecy. -------------------- Overwatch24 - najbardziej zaawansowany Polski portal Overwatch od fanów dla fanów.
Fachowo.co Behance.net/fachowo |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 82 Pomógł: 20 Dołączył: 17.01.2009 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Robisz tabele łączącą Użytkownika z Artykułem.
Np tabela: UserArticle: user_id - klucz obcy na tabele User article_id - klucz obcy na tabele Article I reszte kolumn informacje jakie tylko chcesz zbierać. count - ilosc odwiedzin danego artykulu created - kiedy odwiedzil pierwszy raz updated - kiedy odwiedzil ostatni raz Co kolwiek tylko chcesz. Jak nie ma wpisu dla danego uzytkownika i artykułu to po prostu artykul jest wlasnie dla niego nowy. Jak wyswietli dany artykul to wtedy tworzysz wpis. Ten post edytował ziolo 3.06.2014, 23:24:44 |
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 655 Pomógł: 73 Dołączył: 2.05.2014 Ostrzeżenie: (0%) ![]() ![]() |
A z autorskim forum? 300 wiadomosci i 50 uzytkownikow juz robi bajzel. Musze po ppwrocie przeanalizowac baze forum SMF, 59 user i 75 watkow.
-------------------- Overwatch24 - najbardziej zaawansowany Polski portal Overwatch od fanów dla fanów.
Fachowo.co Behance.net/fachowo |
|
|
![]()
Post
#4
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Cytat 300 wiadomosci i 50 uzytkownikow juz robi bajze Jaki bajzel? Jedna tabele ze stałą liczbą pól to dla Ciebie bajzel?
-------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 655 Pomógł: 73 Dołączył: 2.05.2014 Ostrzeżenie: (0%) ![]() ![]() |
Jeden rekord dla kazdej wiadomosci i uzytkownika. Chce aby nowe komentarze byly oznaczane dla kazdego uzytkownika. Przy kilkuset komentarzach / wiadomosciach i kilkudziesieciu uzytkownikow daje to tysiace rekordow. Chyba ze zle kombinuje.
-------------------- Overwatch24 - najbardziej zaawansowany Polski portal Overwatch od fanów dla fanów.
Fachowo.co Behance.net/fachowo |
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Tak, będzie to dawać tysiące rekordów - w czym problem?
|
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 15 Pomógł: 0 Dołączył: 14.02.2010 Ostrzeżenie: (0%) ![]() ![]() |
Strzelam teraz trochę, ale czy nie możesz porównywać dat? Data przy każdej wiadomości i data wygaśnięcia sesji, no i później tylko dać "dziubka" jak w danym temacie data jest późniejsza? Tylko ze wtedy zostaje Ci przypadek jak ktoś się zaloguje i nic nie przeczyta
![]() |
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 655 Pomógł: 73 Dołączył: 2.05.2014 Ostrzeżenie: (0%) ![]() ![]() |
Wlasnie o datach takze myslalem i zamiast "tematy nie przeczytane" to bedzie po prostu "tenaty nie przeczytabe od ostatniej wizyty".
Z tymi rekordami w bazie to ok, ale co jak jest 2000 wiadomosci i 150 uzytkownikow - a to i tak male liczby. Rekordow moze juz byc miliony. Co praeda flagujemy tylko nowe, nie czytane tematy, jak uzytkownik przeczyta to mozemy to usunac calkowicie z bazy. A np. Dla uzytkownikow ktorzy nie logowali sie od miesiaca to calosc usunac. -------------------- Overwatch24 - najbardziej zaawansowany Polski portal Overwatch od fanów dla fanów.
Fachowo.co Behance.net/fachowo |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 1 240 Pomógł: 278 Dołączył: 11.03.2008 Ostrzeżenie: (0%) ![]() ![]() |
I całość tych kolumn to wyłącznie liczby - a one nie zajmują dużo przestrzeni. Zawsze możesz zrobić tak, że np. komentarze starsze niż miesiąc już nie są oznaczane jako przeczytane/nieprzeczytane (domyślnie są przeczytane) i wtedy usuwasz niepotrzebne dane z tabeli.
Edit. Według mnie większość użytkowników nie przeczyta tych komentarzy - dlatego lepiej dodać wpis tylko dla przeczytanych np. z ostatniego miesiąca. Cała reszta jest nieprzeczytana, a te starsze niż miesiąc są domyślnie przeczytane. Ten post edytował markuz 4.06.2014, 10:02:19 -------------------- |
|
|
![]()
Post
#10
|
|
![]() Grupa: Zarejestrowani Postów: 655 Pomógł: 73 Dołączył: 2.05.2014 Ostrzeżenie: (0%) ![]() ![]() |
Zastanawiam się jak ze strony technicznej to zrobić.. wyświetlenie tematu dodaje wartość do tabeli `mark_read` gdzie są pola: user_id oraz temat_id.
Każdy nowy post usuwa wszelkie wartości z tabeli `mark_read` gdzie temat_id = aktualny temat_id. Każdy nowy użytkownik będzie sprawdzany czy NIE istnieją wartości z jego id w polu user_id w tabeli `mark_read` - jeżeli prawda - brak nowych postów, jeżeli nie to odpowiednia ikonka na forum. Jak dla mnie to strasznie dużo zapytań do bazy, co prawda nie mam dużej strony, bazy użytkowników przewiduje na 40-50 maksymalnie. Dziennie unikalnych wejść obecnie stat4u pokazuje 10-20, najwięcej 39 - więc szału nie ma (małą strona klanowa) jednak mimo to, bez systemu cache wydaje mi się to wszystko ciężkie. -------------------- Overwatch24 - najbardziej zaawansowany Polski portal Overwatch od fanów dla fanów.
Fachowo.co Behance.net/fachowo |
|
|
![]()
Post
#11
|
|
![]() Grupa: Zarejestrowani Postów: 142 Pomógł: 49 Dołączył: 29.07.2010 Ostrzeżenie: (0%) ![]() ![]() |
Dodaj do tabeli mark_read pola "data_przeczytania" (ustawiane na czas bieżący przy dodawaniu/aktualizacji wiersza) i ew. "post_id" (id ostatniego posta w wątku, który użytkownik miał szansę przeczytać).
Z takiej tabeli nie usuwaj wierszy przy każdym dodaniu posta. Usuwaj je cyklicznie codziennie (albo co miesiąc) dla wpisów o "data_przeczytania" starszym niż 30 dni (zapobiegnie to puchnięciu tabeli, którego się boisz), a jednocześnie uznawaj, że jeśli ostatni post w danym wątku został napisany wcześniej niż 30 dni temu, to każdy użytkownik ma ten temat oznaczony jako przeczytany. Temat oznaczasz jako nieprzeczytany tylko wtedy, gdy istnieje wpis w "mark_read" o "data_przeczytania" mniejszym niż data dodania ostatniego posta (warto rozszerzyć o taką kolumnę tabelę "tematy", żeby nie obliczać na żywo). Kolumna "post_id" może posłużyć do wyróżnienia postów napisanych od ostatniej wizyty w wątku, przy czym w przypadku braku wpisu w mark_read takimi postami będą wszystkie posty napisane w ciągu ostatnich 30 dni. Żeby jeszcze bardziej sobie uprościć życie, proponuję napisanie takiego widoku w bazie danych:
Potem odpytujesz widok np. takim zapytaniem:
I otrzymujesz wszystkie tematy z punktu widzenia tego użytkownika, a w kolumnie "czy_przeczytany" masz zero-jedynkową informację o tym czy dany użytkownik przeczytał temat czy nie (i czy nie należy go np. pogrubić na liście). |
|
|
![]() ![]() |
![]() |
Aktualny czas: 19.08.2025 - 19:46 |