Posty nieprzeczytane w skrypcie forum

Mariusz Siwko
05.09.2015

Tworząc własny skrypt forum doszedłem to punktu postów nieprzeczytanych, nie miałem pomysłu na wykonanie tegoż skryptu

Dodatkowa tabelka w bazie danych z 2 kolumnami do której są wkładane informacje o tym że dany post został PRZECZYTANY:

topic_id | user_id

Oczywiście topic_id i user_id mają INDEXy.

i gdy listujesz tematy to dodatkowo wyciągasz informację o przeczytaniu, ja mam mniej więcej tak (tu przykład z adodb) :

$topics = $db -> execute('SELECT topics.topic_id, topics.nazwa, topics.creator_id, topics.creator, topics.replies_count, topics.addtime, topic_read.topic_id AS read_id, topic_read.user_id FROM topics LEFT JOIN topic_read ON (topics.topic_id=topic_read.topic_id AND topic_read.user_id='.$player->id.') WHERE topics.kat_id='.$_GET['cat'].' ORDER BY topics.'.$_GET['sort'].' DESC');

Dalej w pętli która listuje wyciągnięte informacje daję instrukcję warunkową sprawdzającego czy
$topics->fields['user_id'] istnieje, jak nie to oznacza post jako Nieprzeczytany.

- Przy dopisywaniu przez kogoś posta do tematu od ID_jakieś_tam są kasowane wszystkie rekordy z tejże tabelki gdzie topic_id == ID_jakieś_tam.

- Jeśli osoba czyta dany temat (informacje też wyciągane z 2 tabel naraz przez JOINowanie, tylko dla konkretnego tematu) i NIE istnieje $topic['user_id'] to wtedy leci insert do tej tabeli oznaczający temat jako przeczytany.

Propozycja Kiri jest dość prosta do wykonania i bardzo zoptymalizowana

Zgłoś swój pomysł na artykuł

Więcej w tym dziale Zobacz wszystkie