KEJML: Například okoun.cz to má takhle "od nepameti" :)
Stejně si musíš pamatovat oblíbené/bookmarkované diskuze uživatele a poslední přečtený příspěvek v nich, abys mohl udělat seznam s počtem nepřečtených/nových.
Takže taková naivní implementace je (ve skutečnosti tam pak je samozřjmě údajů víc a rozhozené po tabulkách a další chytristiky, jako třeba řazení do skupin atd. ), že uživatel má seznam diskuzí a každá z nich má odkaz na diskuzi a id posledního přečteného příspěvku. A když si uživatel nechá zobrazit bookmarky, tak projedeš ten seznam a u každé spočteš kolik nových tam je a jestli se teda má ukázat název vždy, a nebo jen když si otevře sekci a chce vidět i přečtené.
Něco jako
FOR oblíbené IN user.bookmarks (
SELECT novych AS COUNT() FROM přispěvky
WHERE příspěvek.diskuze.id = oblíbené.id AND příspěvek.id > oblíbené.poslední_přečtený
)
Následně můžeš udělat (vtipně řazený a rozdělený a případně skrytý, když nových=0) výpis s počtem aktuálně nových (a pro každé znovuzobrazení té stránky bookmarků to počítáš znovu, protože lidi furt něco píšou)
Ono to zase není tak šílené, protože přesně na takováhle věci jsou databáze optimalizované a při správném návrhu tabulek to umí velice dobře a rychle. (A taky si všimni, že vlastně tě ty příspěvky ani nezajímají, jenom jejich počet, takže vlastní text bude asi v jiné tabulce, aby se nemusel číst a bylo to malé a rychlé)
Když si pak uživatel tu stráknku rozklikne, tak nejdřív vymyslíš, co mu vlastně chceš ukázat (něco jako 20 posledních příspěvků, nebo kolik má nastaveno, že zobrazit naráz) a ukážeš mu 20 nejnovějších s tím, že ty nové (příspěvek.id > oblíbené.poslední_přečtený) mají červené datum. Něco jako
SELECT příspěvek.* FROM ..... WHERE ... ORDER BY ... DESC LIMIT 20;
Pak tam nasypeš navigaci jako << < 20 > >> a název diskuze a lišty a vyhledávání a tak a celé to hodíš jeho prohlížeči.
A když se pak proklikává dozadu/dopředu tak ve výběru příspěvků máš nějaký výraz jako
SELECT příspěvek.* FROM ..... WHERE ... ORDER BY ... DESC LIMIT stránka*20, 20;
a stránky čísluješ jako 0=nejnovější, 1=ta za ní, 2= jestě starší ...
A aby byl přehled, tak si rovnou do databáze napíšeš u toho uživatele, že oblíbené.poslední_přečtený je teď ten nejnovější, ale pořád počítáš v paměti s tou starou hodnotou, abys měl ty červené datumy správně. Teprve až ti z toho okna/diskuze vyleze, tak použiješ tu novou hodnotu z databáze (stejně tak, když si to okno otevře víckrát, tak v těch dalších oknech bereš už ty nové hodnoty)
---
To je teda naprosto hrubě zjednodušené, ve stylu "auta jezdí, protože se do nich lije benzín" (jenže se do některých lije nafta, elektřina, líh a milion dalších věcí jako třeba olej na smažení, a vlastně to jezdí protože nějaký motor a pedály a převodovka atd. a navíc teda taky fyzika, chemie, mechanika atd. a ještě ...), takže vlastně taková "lež pro děti" ...
---
No a tak jsem si říkal, že když NYX stejně někde má ta čísla příspěvků a stejně to furt počítá dokola, tak "přece nemůže být až takový problém" vzít oblíbené.poslední_přečtený a k tomu počtu nových v bookmarkách přidat odkaz na něj. (A to taky teď udělal a chvála jemu za to)
A když když se na ten odkaz klikne, tak se spočítá, kolik je nových (jo, můžu mít bookmarky otevřené hodinu, nebo den než se pročtu tím ostatním a lidi furt píšou), vydělí se to velikostí stránky a vyjde, kde v historii se to nachází (teda jaká je to "stránka" a tak se rovnou použije to
SELECT příspěvek.* FROM ..... WHERE ... ORDER BY ... DESC LIMIT stránka*20, 20;
A když už teda tu stránku mám, tak se podívám na ten první příspěvek na ní a TEN si uložím jako oblíbené.poslední_přečtený ZA PODMÍNKY, že je větší, než už uložený oblíbené.poslední_přečtený.
Takže pokud jdu dál do historie, tak se mi nové zkrátí jen o to co bylo na té stránce a dál se to nezkracuje, zatímco když jdu dopředu k současnosti, tak se s každou stránkou zjistí, že to novější je a pak mi ty nové "ubývají"
(Jak jsem psal, že mám 15.000+ nepřečtených (třeba 15.023), (a NYX dal limit na 100) tak to skočí na stránku s příspěvky 15.001..15.100 (z toho 23 nových a 77 starých) a budu mít jen 15.000 nových přesně a stránka bude napůl červená a napůl černá (teda 23/77, ale to je fuk). Když pak půjdu o stránku o stránku dozadu, tak jsem jen v černých datech a furt mám při příští návštěvě 15.000 nových, pokud někdo něco dalšího nenapsal. Zatímco když půjdu dopředu, tak se ukáže 14.901..15.000 a budu příště mít jen 14.900 nových )
---
Jako je to fakt silně zjednodušené, vzhledem k tomu, co NYX umí a dělá a různé ignory a double ignory a mazání správcema, či autory a vším možným okolo, ale snad jsem aspoň zachytil tu podstatu, i když provedení bude určitě složitější (jen netuším o kolik moc, a kde všude se to promítne, ale doufejme, že by to zase nemuselo být tak strašné, i když co všechno se tu řešilo s inzercí a dalšíma, tak to vypadá, že je to pod kapotou výrazně složitější, než se navenek jeví. Ona rikša (co tu předvádím) je taky celkem jednoduchá v porovnání s moderním autem (NYX) a ani tu bych sám z ničeho stavět nechtěl)