webForumDet fria alternativet

Flest kommentarer/forumposter.

7 svar · 282 visningar · startad av Ekström

EkströmMedlem sedan feb. 20022 594 inlägg
#1

Hej!

Jag använder följande kod för att få fram vilka fem i mitt forum som postat flest inlägg:

sql = "select f1.thread_author_id, count(*) as cnt from  forum_threads
f1 inner join forum_threads f2 on f1.thread_reply_id = f2.thread_id where
f1.thread_deleted = 0 and f1.thread_adminforum = 0 group by
f1.thread_author_id order by count(*) desc limit 5"

Nu hade jag tänkt kombinera denna med antalet kommentarer i nyheter för att räkna ut vem som har flest kommentarer+inlägg.

För mig är det helt blankt. Jag använder MySQL och kommentarstabellen innehåller ett fält för användarens id, precis som forumtabellen.

Hoppas detta är enkelt :)

Lizard KingMedlem sedan dec. 2005655 inlägg
#2

Har ett liknande problem. LarsG, var håller du hus?

cyprysMedlem sedan dec. 20003 563 inlägg
#3

Nu tycker jag iofs din tabellstruktur ser lite 'annorlunda' ut så jag kanske har missuppfattat något.

select 
	f1.thread_author_id, (count(f2.*) + count(n1.*)) as cnt 
from
	forum_threads f1, 
	forum_threads f2, 
	news_comments n1
where
	f1.thread_reply_id = f2.thread_id and
	f1.thread_deleted = 0 and
	f1.thread_adminforum = 0 and 
	f1.thread_author_id = n1.author_id
group by
	f1.thread_author_id
order by
	2 desc
limit 5
LarsGMedlem sedan dec. 200012 464 inlägg
#4
select 	f1.thread_author_id, 
        (select count(*) 
           from news_comment n1
          where f1.thread_author_id = n1.author_id) +
        count(*) as cnt
  from 	forum_threads f1, 
	forum_threads f2 
 where	f1.thread_reply_id = f2.thread_id 
   and  f1.thread_deleted = 0 
   and  f1.thread_adminforum = 0 
group by f1.thread_author_id
order by cnt desc
limit 5
EkströmMedlem sedan feb. 20022 594 inlägg
#5

Saken är den att det inte är inte säkert att de som kommenterat nyheter också skrivit i forumet. Går det ens att lösa i en SQL-sats?

cyprysMedlem sedan dec. 20003 563 inlägg
#6

Det var en av sakerna jag tyckte var konstig. Kan du inte bara vända påt och gruppera utifrån en användartabell och räkna raderna vars userid överenstämmer?

select t1.user_id, (count(t2.*) + count(t3.*)) as cmnt
from users t1, forum t2, news t3
where t1.id = t2.userId and t1.id = t3.userId
group by 1
order by cmnt desc
limit 1

B.t.w. är osäker att man kan gruppera två counts på det sättet jag gjort.

LarsGMedlem sedan dec. 200012 464 inlägg
#7

Nej, count(t2.*) kommer alltid att få samma värde som count(t3.*). Du räknar totala antalet rader i resultatet i joinen grupperat per användare.

EkströmMedlem sedan feb. 20022 594 inlägg
#8

Tack, LarsG. Löste det.

131 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
128 ms — hämta tråd, inlägg och bilagor (db)