/ Forside / Teknologi / Udvikling / SQL / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
SQL
#NavnPoint
pmbruun 1704
niller 962
fehaar 730
Interkril.. 701
ellebye 510
pawel 510
rpje 405
pete 350
gibson 320
10  smorch 260
Udtræk fra SQL database
Fra : Kasper Johansen


Dato : 25-07-04 17:24

Hej gruppe.

Jeg har en database der ser nogenlunde sådan her ud:

id, brugerid, besked


Jeg vil så vise de sidste nye beskeder, men jeg vil kun have en besked for
hver bruger, altså vil jeg ikke se den samme bruger vist 2 gange.

Er der en mulighed for at gøre noget smart i forspørgslen?

Mvh
Kasper



 
 
*XxX* (25-07-2004)
Kommentar
Fra : *XxX*


Dato : 25-07-04 17:36


"Kasper Johansen" <kasper@johansen.tdcadsl.dk> skrev i en meddelelse
news:4103deb2$0$259$edfadb0f@dread11.news.tele.dk...
>
> Er der en mulighed for at gøre noget smart i forspørgslen?

Brug Group By

Select * From tabel Group By brugerid

>
> Mvh
> Kasper
>
>



Kristian Damm Jensen (26-07-2004)
Kommentar
Fra : Kristian Damm Jensen


Dato : 26-07-04 07:13

"*XxX*" <fatman00hot@hotmail.com> wrote in message news:<4103e127$0$184$edfadb0f@dread11.news.tele.dk>...
> "Kasper Johansen" <kasper@johansen.tdcadsl.dk> skrev i en meddelelse
> news:4103deb2$0$259$edfadb0f@dread11.news.tele.dk...
> >
> > Er der en mulighed for at gøre noget smart i forspørgslen?
>
> Brug Group By
>
> Select * From tabel Group By brugerid

Nonsens.

Hvilken værdi forventer du skal komme for hhv. id og besked i dette
tilfælde? Den seneste? Den første? En tilfældig, afhængig af hvordan
basen har valgt at sortere sine data?

<RANT>
Det er meningsforstyrrende at bruge group by, hvis det man ønsker ikke
involverer at lave en gruppering med det formål at udnytte en
aggregreingsfunktion!!!
</RANT>

VH
Kristian

Kristian Damm Jensen (26-07-2004)
Kommentar
Fra : Kristian Damm Jensen


Dato : 26-07-04 07:22

"Kasper Johansen" <kasper@johansen.tdcadsl.dk> wrote in message news:<4103deb2$0$259$edfadb0f@dread11.news.tele.dk>...
> Hej gruppe.
>
> Jeg har en database der ser nogenlunde sådan her ud:
>
> id, brugerid, besked
>
>
> Jeg vil så vise de sidste nye beskeder, men jeg vil kun have en besked for
> hver bruger, altså vil jeg ikke se den samme bruger vist 2 gange.
>
> Er der en mulighed for at gøre noget smart i forspørgslen?

select *
from tabel t1
where tidspunkt =
(select max(tidspunkt)
from tabel t2
where t1.brugerid = t2.brugerid)


VH
Kristian

P.S. Der er *to* 'e'-er i forespørgsel.

Casper Bang (02-08-2004)
Kommentar
Fra : Casper Bang


Dato : 02-08-04 19:04

> Jeg har en database der ser nogenlunde sådan her ud:
>
> id, brugerid, besked
>
>
> Jeg vil så vise de sidste nye beskeder, men jeg vil kun have en besked for
> hver bruger, altså vil jeg ikke se den samme bruger vist 2 gange.
>
> Er der en mulighed for at gøre noget smart i forspørgslen?

Hvad med:

SELECT DISTINCT brugerid FROM mintabel ORDER BY id DESC



Kristian Damm Jensen (03-08-2004)
Kommentar
Fra : Kristian Damm Jensen


Dato : 03-08-04 10:21

"Casper Bang" <webmaster_fjerndette@fjerndette_secretsofwar.net> wrote in message news:<410e8221$0$154$edfadb0f@dread11.news.tele.dk>...
> > Jeg har en database der ser nogenlunde sådan her ud:
> >
> > id, brugerid, besked
> >
> >
> > Jeg vil så vise de sidste nye beskeder, men jeg vil kun have en besked for
> > hver bruger, altså vil jeg ikke se den samme bruger vist 2 gange.
> >
> > Er der en mulighed for at gøre noget smart i forspørgslen?
>
> Hvad med:
>
> SELECT DISTINCT brugerid FROM mintabel ORDER BY id DESC


Men så får han jo ikke beskeden med ud.

Det kan grundlæggende ikke gøres uden to selects. Den ene select kan
være indlejret i den anden - som i min løsning - eller de to selects
kan komme efter hinanden (find først max id, find dernæst data til
dette max id).

VH
Kristian

Casper Bang (03-08-2004)
Kommentar
Fra : Casper Bang


Dato : 03-08-04 11:23

> Men så får han jo ikke beskeden med ud.
>
> Det kan grundlæggende ikke gøres uden to selects. Den ene select kan
> være indlejret i den anden - som i min løsning - eller de to selects
> kan komme efter hinanden (find først max id, find dernæst data til
> dette max id).

Nej, det har du ret i... I så fald må man vel kunne bruge:
SELECT DISTINCT m.brugerid, (SELECT besked FROM mintabel WHERE brugerid =
m.brugerid) as teksten FROM mintabel as m ORDER BY id DESC



Peter Lykkegaard (03-08-2004)
Kommentar
Fra : Peter Lykkegaard


Dato : 03-08-04 11:30

"Casper Bang" wrote

> Nej, det har du ret i... I så fald må man vel kunne bruge:
> SELECT DISTINCT m.brugerid, (SELECT besked FROM mintabel WHERE
brugerid =
> m.brugerid) as teksten FROM mintabel as m ORDER BY id DESC
>
Nope - du får en fejl
Øvelsen går så på at tænke igennem hvorfor

- Peter



Casper Bang (03-08-2004)
Kommentar
Fra : Casper Bang


Dato : 03-08-04 11:52

> > SELECT DISTINCT m.brugerid, (SELECT besked FROM mintabel WHERE
> brugerid =
> > m.brugerid) as teksten FROM mintabel as m ORDER BY id DESC
> >
> Nope - du får en fejl
> Øvelsen går så på at tænke igennem hvorfor

Hmm... skulle nok have lavet ORDER BY m.id i stedet :)



Peter Lykkegaard (03-08-2004)
Kommentar
Fra : Peter Lykkegaard


Dato : 03-08-04 13:48

"Casper Bang" wrote

> > > SELECT DISTINCT m.brugerid, (SELECT besked FROM mintabel WHERE
> > > brugerid =
> > > m.brugerid) as teksten FROM mintabel as m ORDER BY id DESC
> > >
> > Nope - du får en fejl
> > Øvelsen går så på at tænke igennem hvorfor
>
> Hmm... skulle nok have lavet ORDER BY m.id i stedet :)
>
Njahh, ikke så simpelt

Hvor mange rækker vil denne monstro returnere?
SELECT besked FROM mintabel WHERE brugerid = m.brugerid

Du skal (må) jo kun have een forekomst pr "brugerid"

- Peter

- Peter



Casper Bang (03-08-2004)
Kommentar
Fra : Casper Bang


Dato : 03-08-04 15:28

> > > > SELECT DISTINCT m.brugerid, (SELECT besked FROM mintabel WHERE
> > > > brugerid =
> > > > m.brugerid) as teksten FROM mintabel as m ORDER BY id DESC
> > > >
> > > Nope - du får en fejl
> > > Øvelsen går så på at tænke igennem hvorfor
> >
> > Hmm... skulle nok have lavet ORDER BY m.id i stedet :)
> >
> Njahh, ikke så simpelt
>
> Hvor mange rækker vil denne monstro returnere?
> SELECT besked FROM mintabel WHERE brugerid = m.brugerid
>
> Du skal (må) jo kun have een forekomst pr "brugerid"

Hmm, good point... jeg er vist helt på afveje med den her SQL sætning :p



Peter Lykkegaard (03-08-2004)
Kommentar
Fra : Peter Lykkegaard


Dato : 03-08-04 19:22

"Casper Bang" wrote
>
> Hmm, good point... jeg er vist helt på afveje med den her SQL sætning
:p
>
Nej, nej, du er faktisk tættere på målet end du tror

- Peter



Casper Bang (04-08-2004)
Kommentar
Fra : Casper Bang


Dato : 04-08-04 07:27

> > Hmm, good point... jeg er vist helt på afveje med den her SQL sætning
> :p
> >
> Nej, nej, du er faktisk tættere på målet end du tror

Hmm... det kan vel ikke være SÅ simpelt:
SELECT DISTINCT m.brugerid, (SELECT TOP 1 besked FROM mintabel WHERE
brugerid =
m.brugerid ORDER BY id) as teksten FROM mintabel as m ORDER BY m.id DESC

Men jeg tror nu jeg bevæger mig mere ud på at gætte, end at komme med
kvalificerede bud :p Det er lidt nemmere at teste det efter, hvis man sidder
med databasen :)



Peter Lykkegaard (04-08-2004)
Kommentar
Fra : Peter Lykkegaard


Dato : 04-08-04 08:33

"Casper Bang" wrote
>
> Hmm... det kan vel ikke være SÅ simpelt:
> SELECT DISTINCT m.brugerid, (SELECT TOP 1 besked FROM mintabel WHERE
> brugerid =
> m.brugerid ORDER BY id) as teksten FROM mintabel as m ORDER BY m.id
DESC
>
Kunne det være
Jeg ville dog lave en group by BrugerID med max på ID
beskeden hentes med reference til ID i stedet for BrugerID

> Men jeg tror nu jeg bevæger mig mere ud på at gætte, end at komme med
> kvalificerede bud :p Det er lidt nemmere at teste det efter, hvis man
sidder
> med databasen :)
>

Hvis jeg ikke er skråsikker så plejer at lave en lille testting for ikke
at ryge ud i noget snavs
Alternativt giver jeg en beskrivelse i stedet

Du kan lede tilbage i gruppe der har fornylig være en tråd om noget
lignende
Hvis du ikke kan finde tråden så råb lige op

- Peter



Michael Hjorth (04-08-2004)
Kommentar
Fra : Michael Hjorth


Dato : 04-08-04 20:43

On Sun, 25 Jul 2004 18:24:16 +0200, Kasper Johansen wrote:

> Hej gruppe.
>
> Jeg har en database der ser nogenlunde sådan her ud:
>
> id, brugerid, besked
>
>
> Jeg vil så vise de sidste nye beskeder, men jeg vil kun have en besked for
> hver bruger, altså vil jeg ikke se den samme bruger vist 2 gange.
>
> Er der en mulighed for at gøre noget smart i forspørgslen?
>
Hvordan kan du beslutte hvilken besked som er den nyeste? Har du en
oprettelsesdato eller lignende?

Jeg vil, hvis jeg har en dato, løse problemet på denne måde:

SELECT t1.brugerid, t1.besked
FROM din_tabel t1
WHERE t1.oprettelsesdato=(SELECT MAX(t2.oprettelsesdato)
FROM din_tabel t2
WHERE t2.brugerid=t1.brugerid)


Michael.

Søg
Reklame
Statistik
Spørgsmål : 177514
Tips : 31968
Nyheder : 719565
Indlæg : 6408618
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste