webForumDet fria alternativet

Sortera och räkna

ASPur ASP

37 svar · 693 visningar · startad av Inferis

Medlem sedan sep. 2000667 inlägg
Frågan#1

Jag har ingen kod och vet inte hur jag ska gå till väga.
Vet inte vad jag ska söka efter.

Jag vill följande;

Hämta data (nick) ur en Access 2000 db
Sortera dessa data och räkna hur många meddelanden vart har.

I tabellen Senaste finns fälten ID, Nick, Meddelande och även datumet

Alltså, i fältet Nick finns data som:

  • Bertil
  • Adam
  • Bertil
  • Adam
  • Adam
  • Adam
  • Ceasar
  • Bertil
  • David

Samma data förekommer alltså väldigt ofta.

Jag vill att man ska kunna presentera alla olika nick som finns och bredvid var nick ska det stå hur många meddelanden som vart nick har skickat.

Så det blir så här:

  • Bertil (3)
  • Adam (4)
  • Ceasar (1)
  • David (1)

Allt detta vill jag kunna sortera efter ID, bokstav eller antal meddelanden. Det finns över 20.000 poster i databasen om det spelar någon roll.

Någon som vill hjälpa mig?

Medlem sedan maj 200197 inlägg
#2

Är kanske inte den bästa lösningen men den bör fungera..

<%
Set ConnObj=Server.CreateObject("ADODB.Connection")
ConnObj.Open "DBQ=c:\inetpub\scripts\din_DB.mdb;DRIVER=Microsoft Access Driver (*.mdb)"

SQL = "Select Distinct(Nick) from Senaste ORDER BY Nick ASC"
Set Rs = ConnObj.Execute(SQL)
Do Until Rs.EOF
	
	CountSQL = "Select Count(*) AS nCount from Senaste Where Nick = '"& Rs("Nick") &"'"
	Set Rs2 = ConnObj.Execute(CountSQL)
	Do Until Rs2.EOF
	
		Response.write Rs("Nick") & "(" & Rs2("nCount") & ")"
		
	Rs2.MoveNext
	Loop
	
Rs.MoveNext
Loop
ConnObj.Close
%>
Medlem sedan sep. 2002366 inlägg
#3

Du kan skriva det där med en öppning bara.
Såhär: (där Connect är ditt databasobjekt)

SQL = "SELECT Nick,Meddelande,datumet,COUNT(*) AS antal FROM Senaste GROUP BY Nick"
Set RS = Connect.Execute(SQL)
	Do Until RS.EOF
		Response.write RS("Nick") & "(" & RS("antal") & ")<br>"
	RS.MoveNext
	Loop
Set RS = Nothing

-Eitraz

Medlem sedan sep. 2000667 inlägg
#4

Tack!

Det första exemplet fungerade perfekt!

Det andra exemplet gav följande felmeddelande:

Microsoft][ODBC Microsoft Access Driver] You tried to execute a query that does not include the specified expression 'Meddelande' as part of an aggregate function
Medlem sedan sep. 2000667 inlägg
#5

Det är just det där med Distinct.. Vad gör det egentligen?
Det sorterar bort dubletter eller?

Vissa poster förekommer två gånger ändå iofs..

Medlem sedan sep. 2002366 inlägg
#6

Verkar inte som du har nåt fält som heter Meddelande kanske?

Enda som behövs i mitt uttryck är väll igentligen
Nick,COUNT(*) AS antal

-Eitraz

Medlem sedan sep. 2000667 inlägg
#7

Problem igen... :-(

Om jag försöker med:

SQL = "Select Distinct(Nick) from Senaste ORDER BY ID ASC"

Så får jag felmeddelande:

[Microsoft][ODBC Microsoft Access Driver] ORDER BY clause (id) conflicts with DISTINCT.

Medlem sedan sep. 2000667 inlägg
#8

Eitraz:
Fältet Meddelande finns.

Hur kan man sortera detta efter Id, Nick och datum?
Har även ett fält som heter Datumet.

Medlem sedan sep. 2002366 inlägg
#9

SQL = "Select Distinct(Nick),ID from Senaste ORDER BY ID ASC"
måste det väll bli isåfall?

-Eitraz

Medlem sedan sep. 2000667 inlägg
#10

Blir väldigt konstiga resultat av det där. Samma data kommer flera gånger i rad. Plus att sidan blir otroligt trögladdad.

Medlem sedan sep. 2002366 inlägg
#11

på min:
SQL = "SELECT ID,Nick,COUNT(*) AS antal FROM Senaste GROUP BY nick ORDER BY ID"

Men jag förstår inte varför du ska ordna efter ID när det är olika för samma namn.. eller?

-Eitraz

Medlem sedan dec. 200012 464 inlägg
#12
SQL = "SELECT Nick,COUNT(*) AS antal FROM Senaste GROUP BY Nick"

Om man använder group by så måste alla kolumner i select-listan ingå antingen i en aggregatfunktion eller finnas med i group by. Det har alla dbms-tillverkare utom Mysql förstått.

Distinct är ingen funktion. Den appliceras alltid på alla kolumner i resultatet.

Du kan sortera efter namn

SQL = "SELECT Nick,COUNT(*) AS antal FROM Senaste GROUP BY Nick order by nick"

eller antal

SQL = "SELECT Nick,COUNT(*) AS antal FROM Senaste GROUP BY 2 desc"
Medlem sedan sep. 2000667 inlägg
#13

Jag vill ju ordna så att den som senast gjorde en post kommer överst i listan.

Medans någon som kanske inte postat på två månader hamnar längst ner.

Medlem sedan dec. 200012 464 inlägg
#14

Sortera efter sista postning

SQL = "SELECT Nick,COUNT(*),max(datePosted) AS antal FROM Senaste GROUP BY Nick order by 3 desc"
Medlem sedan sep. 2000667 inlägg
#15

LarsG:
Funkade kanon!
Men då försvann räkningen av Meddelande.. :-(

Datumfältet heter Datumet. Ändrade datePosted till det.

Medlem sedan sep. 2002366 inlägg
#16

AS antal
ska ligga efter COUNT(*)

-Eitraz

Medlem sedan sep. 2000667 inlägg
#17

Nu börjar jag känna mig riktigt besvärlig.. :-)

Medlem sedan sep. 2002366 inlägg
#18

men du har fått ordning på det nu va? ;)

-Eitraz

Medlem sedan sep. 2000667 inlägg
#19

LarsG:
Vad är det som händer vid order by 3 desc?

Och sortera efter antal på order by 2 desc?

Hur vet den vad som ska sorteras där egentligen?

Medlem sedan sep. 2002366 inlägg
#20
Nick,COUNT(*),max(datePosted)
 (1)   (2)          (3)

:D

-Eitraz

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