räkna och sortera

ASP

21 svar · 434 visningar · startad av aleborg

Medlem sedan jan. 20013 341 inlägg
Trådstart#1

Jag är helt hjärndöd idag!
Jag håller på ett forum där man ska kunna sortera efter antal forum/inlägg

Så här ser koden ut idag:

SQL="Select * From DevForum Where ForumBel IS NULL Order By "& Session("sort2")
Set forum=Conn.Execute(SQL)
Do Until forum.EOF
Set number = Conn.Execute("Select COUNT(ForumID) AS cnt FROM [DevForum] WHERE [ForumBel] ="& forum("ForumID") &";")
antal= number("cnt")

Session("sort2") innehåller oftast ett kolumnnamn.

Hur ska jag skriva för att sorteringen ska ske via antal?

Medlem sedan jan. 20013 341 inlägg
#2

Någon som vet?

Medlem sedan dec. 19996 721 inlägg
#3

Hur ser tabellerna ut? Vilken information vill du ha ut (inte * väl)? Det går antagligen att göra allt med en SQL-sats.

Medlem sedan jan. 20013 341 inlägg
#4

Jo, behöver ha ut allt ifrån tabellerna!
Och tanken är att man ska kunna sortera forum efter antal subforum.

Så här e det uppbyggt:
För forum:

DevForum
--ForumID
--ForumName - namn på forumet
--ForumBel - om detta är tomt så är forumet ett "huvudforum" annars så är det ett subforum och innehåller då ID nummret till det forum det tillhör.

Jag har en sida som ser ut ung. så här:

-Forum1 -- 3 st
-Forum2 -- 5 st
-Forum3 -- 2 st

där sista delen är antal subforum.

Medlem sedan jan. 20013 341 inlägg
#5

någon?

Medlem sedan dec. 200012 464 inlägg
#6
select ForumID,ForumName,ForumBel,count(*) as antal
from devtopics
group by ForumID,ForumName,ForumBel
order by 4 desc
Medlem sedan jan. 20013 341 inlägg
#7

Hmmm, jag hänger inte riktigt med i din SQL sats nu :(

Medlem sedan dec. 200012 464 inlägg
#8

För varje unik kombination av
ForumID,ForumName,ForumBel
så tar man fram antalet förekomster i tabellen och sorterar resultatet fallande efter detta värde.

Medlem sedan jan. 20013 341 inlägg
#9

men "order by 4 desc" ???

Medlem sedan dec. 200012 464 inlägg
#10

order by 4 desc

innebär att man sorterar med avseende på fjärde uttrycket i select-listan, dvs count(*)

Egentligen så skall man kunna skriva


order by antal desc

men det verkar vara problem att använda den konstruktionen i Access.

Medlem sedan jan. 20013 341 inlägg
#11

Använder SQL Server :)

Medlem sedan dec. 200012 464 inlägg
#12

Ok, då skall det vara lugnt att använda


order by antal desc
Medlem sedan jan. 20013 341 inlägg
#13

Problemet är att count måste räkna ut hur många subforum som finns till varje forum dvs hur många finns det som har ForumBel=ForumID.

SQL="Select * From DevForum Where ForumBel IS NULL Order By "& Session("sort2")
Set forum=Conn.Execute(SQL)
Do Until forum.EOF
Set number = Conn.Execute("Select COUNT(ForumID) AS cnt FROM [DevForum] WHERE [ForumBel] ="& forum("ForumID") &";")
antal= number("cnt")

Den här koden fungerar men man skulle behöva kombinera dom

Medlem sedan dec. 200012 464 inlägg
#14
sql = "select forumid,count(ForumBel) as cnt from DevForum group by forumid order by cnt desc"

Set forum=Conn.Execute(SQL)
Do Until forum.EOF
antal= forum("cnt")
Medlem sedan jan. 20013 341 inlägg
#15

Problemet är att jag bara ska visa dom där "ForumBel IS NULL" och sortera dom efter hur många subforum dom har, subforumen finns i samma tabell men har i ForumBel id numret till det forum som dom till hör(ett subforum däremot kan inte innehålla ytterligare subforum)

Medlem sedan dec. 200012 464 inlägg
#16
select forumbel,count(*) as cnt from devforum
where forumbel is not null group by forumbel order by cnt desc

Nu får du inte med de forum som saknar subforum.

Medlem sedan jan. 20013 341 inlägg
#17

nu får jag bara fram subforumen :e och dom skulle bara räknas ;)

Medlem sedan jan. 20013 341 inlägg
#18

någon som har nån idé hur man kan lösa det??

Medlem sedan dec. 19996 721 inlägg
#19
SELECT f1.ForumID,f1.ForumName,COUNT(f2.ForumID) AS cnt FROM devforum f1
LEFT OUTER JOIN devforum f2 ON f1.ForumID=F2.ForumBel
WHERE F1.ForumBel IS NULL
GROUP BY f1.ForumID,f1.ForumName
ORDER BY cnt DESC
Medlem sedan jan. 20013 341 inlägg
#20

TACK emission, du kungen :e
Hur ska jag göra för att få samma funktion fast räkna efter antal som finns i en annan tabell?

Varje subforum har ett antal inlägg i Devtopics förenade genom att i Devtopics så finns ForumBel som innehar ID numret till det forum det tillhör, idag ser det ut så här:

SQL="Select * From DevForum Where ForumBel="& forum("ForumID") &" Order By "& Session("sort2")
Set subba=Conn.Execute(SQL)
Do Until subba.EOF
Set number = Conn.Execute("Select COUNT(TopicID) AS cnt FROM [DevTopics] WHERE [ForumBel] ="& subba("ForumID") &";")
ant= number("cnt")
396 ms totalt · 4 externa anrop · v20260731065814-full.d34c6d5a
124 ms — deklarationer (db)
133 ms — hämta statistik (db)
136 ms — hämta tråd, inlägg och bilagor (db)
123 ms — ändringar (db)