SQL: Nejdiskutovanejsi clanky

Jan Tichy - Webbie jan.tichy na webbie.cz
Sobota Listopad 2 01:47:36 CET 2002


DDV,

prosim o pomoc pri vymysleni selectu (MySQL), nemuzu 
na to nejak prijit, at si lamu hlavu sebevic...

Mam tabulku s diskusema ke clanku, pro prehlednost zjednodusim:
  diskuse (diskuse_id, clanek_id, datum, text)

A rad bych jednim selectem (bez vnrenych selectu apod.) ziskal 
pet nejdiskutovanejsich clanku za posledni tyden, a to za podminek:

- v zaznamu musi byt pocet VSECH prispevku k clanku
- razeni je udelano tak, ze se vezmou u jednotlivych clanku
   pocty JEN prispevku vlozenych v poslednim tydnu
   a podle nich se clanky sestupne sesortuji.


Umim to samozrejme udelat bez poctu VSECH prispevku, 
takze mam k dispozici jen pocet prispevku za posledni tyden. 
Vcetne poctu VSECH prispevku ale nevim, nebot v jednom
selectu mam zaroven count vsech prispevku a zaroven i jen
count prispevku za posledni tyden. Napadlo mne spojit 
tabulku diskuse samu se sebou (a jednu z nich prejmenovat
napr. na posledni_tyden), udelat pro posledni_tyden 
podminku na datum v minulych 7 dnech a zgroupovat to.

    SELECT diskuse.clanek_id, 
    COUNT(diskuse.clanek_id) AS celkovy_pocet
    COUNT(posledni_tyden.diskuse_id) AS posledni_pocet
    FROM diskuse, diskuse AS posledni_tyden
    WHERE diskuse.clanek_id=posledni_tyden.clanek_id
    AND posledni_tyden.datum>'".Date("Y-m-d H:i:s", Time()-(7*24*3600))."' 
    GROUP BY diskuse.clanek_id
    ORDER BY posledni_pocet DESC, celkovy_pocet DESC, 
    LIMIT 5;

To mi vsak hazi nejake vysoke pocty -- napriklad ackoliv 
kdyz bych predpokladal, ze by melo byt celkovy_pocet=20
a posledni_pocet=3, tak mi to vraci jakoby jejich nasobek,
tedy celkovy_pocet = posledni_pocet = 60.

Takze mi tam jeste nekde pravdepodobne hapruje nejaky 
kartezky soucin, kde chybi jeste nejaka omezujici podminka.
Ale uz me vubec nenapada kde a co....

Diky,

Honza Tichy


    


Další informace o konferenci Databases