Jeg har en database med 8000 artikler og nu vil jeg gerne lave en 'mest sete artikler de seneste 14 dage' liste.
Jeg er bare stødt ind i et problem.
I basen har jeg to tabeller - article og article_views. I article_view indsættes hver nat en række for hver article, som indeholder hvor mange gange artiklen har været vist samt unix_timestamp for hvornår rækken blev indsat.
Dvs for artikel 88 kan article_views se sådan ud:
Id View Date 88 1219 1142376932 88 1219 1142290529 88 1215 1142117738 88 1212 1141685729 88 1210 1141340132
Umiddelbart kan jeg ikke bruge det til noget, det jeg vil er at tage antallet af dage siden artiklen blev lagt online, det felt findes i article.publish_date og dividere med den seneste optælling.
Eftersom jeg ikke har designet databasen eller cronjobbet, har jeg ikke haft mulighed for at lave denne udregning løbende, så mit spørgsmål er om det kan laves direkte via sql?
De to tabeller er knyttet sammen således: SELECT article_id, viewcounts FROM article_viewcounts LEFT JOIN article ON (article_viewcounts.article_id = article.id) WHERE article.active = 't'
min idé var at få en dynamisk liste hvor den kunne vise de artikler som var mest læst de seneste 14 dage, jeg benytter allerede overstående i min kode, hvordan kan jeg konstruere en sq-sætning som giver mig det ønskede resultat?
SELECT * FROM article WHERE id IN ( SELECT id FROM ( SELECT id,MAX(view) AS count FROM article_views JOIN article ON article.id=article_views,article_id WHERE article_views > X GROUP BY id ORDER BY count DESC LIMIT X) temp)
SELECT id,MAX(view) AS count FROM article_views JOIN article ON article.id=article_views,article_id WHERE article_views > X GROUP BY id ORDER BY count DESC LIMIT X
giver id og antal for de X mest viste artikler siden tidspunkt X
så selecter vi id fra det resultat
og så selecter vi alle felter for de artikler som er i den liste
ja, okay - men stadig. jeg læser og forstår din sql kode men alligevel forstår jeg ikke hvorfor den kan give de 10, 20 læste artikler de sidste 14 dage? cronjobbet sletter ikke gamle artikler, så hvis en artikel har været læst 20.000 gange i sin levetid, vil den vel altid komme først?
SELECT id,MAX(view) AS count FROM article_views JOIN article ON article.id=article_views,article_id WHERE article_views > X and unix_timestamp > (now()-14) GROUP BY id ORDER BY count DESC LIMIT X
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.