štai ką pačiam pavyko primastyti šia tema.
Na, tarkim yra vartotojų (`tbl_users`) ir žinučių (`tbl_posts`) lentelės, jų struktūra nelabai esmė. Perskaitytų žinučių sąrašui, tikriausiai, prireiks dar vienos lentelės - `tbl_viewedposts` su laukais `user_id`, `post_id`.
Toliau. Pvz. jau yra 100 vartotojų sąrašas, ir yra 100 parašytų žinučių. Norint įdiegti minėtą funkciją, reiktų, kad visiems esamems vartotojams visos esamos žinutės jau būtų "perskaitytos". Todėl logiška būtų priimti, kad esant tuščiai `tbl_viewedposts` lentelei, visos žinutės yra "perskaitytos" pas visus vartotojus (šiuo atveju, `tbl_viewedposts` lentelei labiau tiktų vardas `tbl_unviewedposts`).
Tačiau, toks variantas nepatinka tuo, kad norint pridėti naują vartotoją, jam visos žinutės turi būtų "neperskaitytos". O tam reikia lentelėje `tbl_viewedposts` padaryti 100 įrašų (t.y. tiek, kiek yra žinučių). čia gal ir nebūtų bėdos, nes naujam sukurtam vartotojui galima daryti ir taip, kad visos senos žinutės jam būtų "perskaitytos". Tačiau iš kitos pusės, kūriant naują žinutę, `tbl_viewedposts` taip pat reikia užpildyti tiek kartų, kiek yra vartotojų.
Kitas variantas, jei imti atvirkščiai - jei lentelė `tbl_viewedposts` tusčia, tada visiems vartotojams visos žinutės yra "neperskaitytos"/"naujos". Tačiau šiuo atveju yra panašios problemos. Pvz. norint, kad visiems seniems vartotojams visos senos žinutės būtų "perskatytos" reikia padaryti 100*100 įrašų (100 - vartotojų, 100 - žinučių). Kūriant naują vartotoją, kuriam visos žinutės būtų "perskaitytos", vėl gi reikia daryti tiek įrašų, kiek yra naujienų.
Vienu žodžiu, mano išmastyti variantai man kažkaip nelabai patinka ir atrodo neoptimalūs - po gana dažnai daromų veiksmų, vykdomos ilgos užklausos. Gal visas tas žinutes dar pagal laiką kaip nors žiūrėti, kad pavyzdžiui po 10 dienų visos žinutės pažymiamos kaip "senos" ir "perskaitytos", o jei būtų kokia nors svarbi žinutė, tai ją atitinkamai dar kaip nors pažymėti. Na, nežinau, norėtųsi tiesiog išgirsti šviežių idėjų šia tema, nes jau protas biški užsiciklino. ;)