Avatar billede psychodad Nybegynder
09. august 2004 - 16:15 Der er 4 kommentarer og
1 løsning

udtræk fra tabel med 2x limit eller omstrukturering af sql query

Jeg er ved at lave en "hot" liste til min hjemmeside.
Det er en liste over mest aktive debatter, dvs hvilken tekst har fået flest kommentarer, hvor nyere kommentarer vægtes højt i forhold til ældre.

Måden jeg har valgt at gøre det på er følgende (alle kommentarer ligger i samme tabel uanset tekst-type):

1. hent X seneste kommentarer ud (X skal være forholdsvis stor i forhold til gennemsnitligt antal kommentarer per dag, f.eks 7x gennemsnitligt antal kommentarer per dag)

2. Optæl antal kommentarer i den udtrækkede pulje fra før fordelt på tekster.

3. Sorter efter antal kommentarer, og returner de Y mest kommenterede

Tabellen er opbygget ca sådan her:
id | textItemId | dateSubmitted | userId | text

Jeg har lavet følgende sql:

SELECT  count(*) as numComments, id, textItemId
FROM comments
GROUP BY textItemId
ORDER  BY numComments DESC
LIMIT 0,5

Dette returnerer de 5 mest kommenterede topics, men baseret på samtlige kommentarer.

Det er som beskrevet ikke det jeg vil idet jeg kun vil kigge på f.eks de sidste 2500 kommentarer.
Derved kommer tidsaspektet med ind så en gammel debat ikke vil blive ved med at hænge som hot topic da jeg kun kigger på de mere aktuelle kommentarer.

Spørgsmålet er altså:
Kan jeg lave et udtræk hvor jeg optæller kommentarer til tekster, men kun baseret på de sidste f.eks 2500 kommentarer ?

rent sql mæssigt ville det svare til:

sel1:
SELECT id, textItemId
FROM comments ORDER BY dateSubmitted
LIMIT 2500

sel2:
SELECT count(*) as numComments, id, textItemId
FROM sel1
GROUP BY textItemId
ORDER  BY numComments DESC
LIMIT 0,5

Håber det giver mening, og det skal så udføres i samme sql statement.
Avatar billede psychodad Nybegynder
09. august 2004 - 16:17 #1
sel1:
SELECT id, textItemId
FROM comments ORDER BY dateSubmitted
LIMIT 2500

order by dateSubmitted DESC

skulle der stå
Avatar billede overchord Nybegynder
09. august 2004 - 17:10 #2
Det skulle vist ikke vaere noget problem at neste de to select statements saa vidt jeg kan se, altsaa SELECT count(*) as numcomments, id, textitemid FROM (SELECT id, textItemid FROM comments....
Avatar billede psychodad Nybegynder
09. august 2004 - 18:30 #3
Jo det kunne sagtens nestes, jeg var ikke klar over man bare kunne neste på den måde :-)

Skriv lige svar.
Avatar billede psychodad Nybegynder
09. august 2004 - 18:31 #4
Og resultatet blev så:

SELECT count(*) as numComments, textItemId
FROM (SELECT textItemId
FROM comments ORDER BY dateSubmitted DESC
LIMIT 2500) as newest
GROUP BY textItemId
ORDER  BY numComments DESC
LIMIT 0,5
Avatar billede overchord Nybegynder
10. august 2004 - 12:57 #5
ok svar :-)
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester