Avatar billede lund_dk Praktikant
29. august 2006 - 12:29 Der er 26 kommentarer og
2 løsninger

Udskriv kun bruger én gang

Jeg har denne
select top 10 * from logins order by Logindato desc
hvor jeg henter de sidste 10 login fra min database.

Men lad os sige den samme bruger er logget ind flere gange efter hinanden, så kommer brugeren jo til at blive udskrevet flere gange. Der vil jeg at brugeren kun udskriven én gang.

Henter brugeren via feltet "brugerid"

Nogen somkan hjælpe mig med det?

Kører access database
Avatar billede softspot Forsker
29. august 2006 - 12:39 #1
Hmm... måske det kan klares med en lille JOIN...

SELECT TOP 10 *
FROM login INNER JOIN
  (SELECT DISTINCT brugerid
    FROM login) AS login2 ON login.brugerid = login2.brugerid
ORDER BY logindato DESC

Jeg har ikke testet det, så det er bare et forsigtigt forslag...
Avatar billede lund_dk Praktikant
29. august 2006 - 12:43 #2
Er på rette spor.. får ikke fejl i Sql sætningen, men i mit output..
jeg udskriver med rsListe("brugerid") men får denne fejl:

Elementet kan ikke findes i den samling, der svarer til det anmodede navn eller ordenstal.
Avatar billede softspot Forsker
29. august 2006 - 12:46 #3
Jeg har ikke skrevet tabelnavnet korrekt (der mangler et s i logins):

SELECT TOP 10 *
FROM logins INNER JOIN
  (SELECT DISTINCT brugerid
    FROM logins) AS logins2 ON logins.brugerid = logins2.brugerid
ORDER BY logindato DESC

Prøv den i stedet...
Avatar billede lund_dk Praktikant
29. august 2006 - 12:48 #4
Det så jeg godt, så smed selv 's' på, og fik samme sætning som du lige skrev..og samme fejl..
Avatar billede lund_dk Praktikant
29. august 2006 - 12:49 #5
Set rsListe= Conn.Execute("SELECT TOP 10 * FROM logins INNER JOIN (SELECT DISTINCT brugerid FROM logins) AS logins2 ON logins.brugerid = logins2.brugerid ORDER BY logindato DESC")

<%Do While Not rsListe.EOF%>
<%=rsListe("brugerid")%>
<%
rsListe.MoveNext
Loop
rsListe. close
set rsListe= Nothing
%>
Avatar billede softspot Forsker
29. august 2006 - 13:51 #6
Hmm... det undrer mig at hvis du kan finde kolonnen med din egen SQL, at du ikke kan med den modificerede. Jeg synes jo umiddelbart at det er det samme resultat der hentes... og dog! Prøv lige:

SELECT TOP 10 logins.*
FROM logins INNER JOIN
  (SELECT DISTINCT brugerid
    FROM logins) AS logins2 ON logins.brugerid = logins2.brugerid
ORDER BY logindato DESC
Avatar billede ffsoft Praktikant
29. august 2006 - 14:38 #7
Du kan osse prøve med distinct og distinctrow:

SELECT distinctrow TOP 10 logins.*
FROM logins

Jeg har ikke testet om det virker.
Avatar billede lund_dk Praktikant
29. august 2006 - 15:22 #8
SELECT TOP 10 logins.*
FROM logins INNER JOIN
  (SELECT DISTINCT brugerid
    FROM logins) AS logins2 ON logins.brugerid = logins2.brugerid
ORDER BY logindato DESC

Med denne der er ingen fejl, men den udskriver tilgengæld alle, og ikke "gruperet"
Avatar billede lund_dk Praktikant
29. august 2006 - 15:23 #9
Og det samme med: SELECT distinctrow TOP 10 logins.* FROM logins
Avatar billede lund_dk Praktikant
29. august 2006 - 15:27 #10
SELECT distinct TOP 10 brugerid  FROM logins

Denne virker,kunsten er nu bare at sortere efter 'logindato'
Avatar billede softspot Forsker
29. august 2006 - 16:56 #11
Men den giver dig vel ikke andet en id'erne, du skal vel også bruge de andre informationer...?
Avatar billede lund_dk Praktikant
29. august 2006 - 17:15 #12
Den eneste værdi jeg skal bruge, er kun "brugerid" de øvrige er ligemeget.
Avatar billede softspot Forsker
29. august 2006 - 17:43 #13
OK, jamen, så er det da den mest åbenlyse løsning. Jeg tog bare udgangspunkt i din oprindelige SQL, hvor du vælger alle kolonner (hvilket man kun bør gøre hvis man skal bruge dem allesammen).

Anyway! Så bør du umiddelbart kunne sortere efter logindato med denne SQL:

SELECT distinct TOP 10 brugerid 
FROM logins
ORDER BY logindato DESC
Avatar billede lund_dk Praktikant
30. august 2006 - 12:42 #14
Har jeg prøvet, og der får jeg fejlen:
Microsoft JET Database Engine error '80004005'
ORDER BY clause (logindato) conflicts with DISTINCT.
Avatar billede softspot Forsker
30. august 2006 - 14:17 #15
Hmm... jeg er noget i tvivl om hvad man så skal gøre...
Avatar billede nielle Nybegynder
30. august 2006 - 14:26 #16
Måske noget i denne stil?

SELECT TOP 10 *
FROM
(
    SELECT brugerid, max(logindato) AS maxLogindato
    FROM logins
    GROUP BY brugerid
    ORDER BY maxLogindato DESC
)
Avatar billede nielle Nybegynder
30. august 2006 - 14:45 #17
Eller bare:

SELECT TOP 10 brugerid, max(logindato) AS maxLogindato
FROM logins
GROUP BY brugerid
ORDER BY maxLogindato DESC
Avatar billede lund_dk Praktikant
31. august 2006 - 10:03 #18
Desværre heller..

Måske jeg bare skulle droppe idéen så :(
Avatar billede softspot Forsker
31. august 2006 - 10:26 #19
Jeg har lige fedtet lidt med en access-database, så jeg kunne se resultatet af det jeg lavede og jeg tror denne (en lille variation af nielle's forslag) fungerer:

SELECT TOP 10 brugerid
FROM
(
  SELECT brugerid, MAX(dato) AS sidsteLogin
  FROM taTest_Logins
  GROUP BY brugerid
  ORDER BY MAX(dato) DESC
)

Forskellen er at man ikke må bruge kolonnealias til at sortere efter, her skal man bruge hele udtrykket/funktionen (i dette tilfælde MAX(dato))
Avatar billede lund_dk Praktikant
31. august 2006 - 10:38 #20
Så får jeg igen fejlen:
ADODB.Recordset fejl '800a0cc1'

Elementet kan ikke findes i den samling, der svarer til det anmodede navn eller ordenstal.

/ww/brugere.asp, linje 88

Hvor linie 88 er: rsListe("id")
Avatar billede softspot Forsker
31. august 2006 - 10:47 #21
jamen, det er jo fordi det kun er brugerid der hentes (det synes jeg du sagde var det eneste felt du havde brug for??)...
Avatar billede softspot Forsker
31. august 2006 - 10:47 #22
Se indlæg fra 29/08-2006 17:15:50
Avatar billede lund_dk Praktikant
31. august 2006 - 10:52 #23
Var lige min fejl.., fik lige skrevet forkert  men
SELECT TOP 10 brugerid
FROM
(
  SELECT brugerid, MAX(dato) AS sidsteLogin
  FROM taTest_Logins
  GROUP BY brugerid
  ORDER BY MAX(dato) DESC
)
virker
Avatar billede softspot Forsker
31. august 2006 - 10:57 #24
Jeg går ud fra det så betyder, at du skal bruge et svar (eller to :))...?
Avatar billede lund_dk Praktikant
31. august 2006 - 11:03 #25
nielle har også gjort et godt arbejde for at få det til at virke.. såvil lige afvente en svar fra ham og så dele point.
Avatar billede nielle Nybegynder
31. august 2006 - 11:09 #26
Svar :^)
Avatar billede softspot Forsker
31. august 2006 - 11:55 #27
Tak for point :)
Avatar billede nielle Nybegynder
31. august 2006 - 12:32 #28
Takker :^)
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
Kurser inden for grundlæggende programmering

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