|
| 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.
| |
|
|