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 Test