Avatar billede tchami Nybegynder
26. maj 2004 - 22:24 Der er 12 kommentarer og
1 løsning

Vælge fire poster

Hej,

Umiddelbart lyder det jo meget let, men den er en smule mere kringlet.

Min tabel ser således ud:

id, int(6) unsigned, primary key, auto_increment
headline, varchar(150)
category, tinyint(1)
date, datetime

category kan antage værdien 1, 2, 3 eller 4

Det jeg så ønsker er at hente den nyeste record fra hver enkelt category, dvs. den nyeste record hvor værdien af category er 1, den nyeste record hvor værdien af category er 2 osv. I alt fire records.

Hvordan gør man det med en enkelt SELECT?
Avatar billede arne_v Ekspert
26. maj 2004 - 22:29 #1
SELECT MAX(date),category FROM tabel GROUP BY category

vil returnere nyeste indlæg i kategorierne, men du vil jo nok gerne have resten
af felterne med ...
Avatar billede tchami Nybegynder
26. maj 2004 - 22:33 #2
Hihi, det var jo såre simpelt :) Så kan man lære at tænke sig om lidt bedre..

Smid et svar :)
Avatar billede arne_v Ekspert
26. maj 2004 - 22:34 #3
Var det nok ??
Avatar billede tchami Nybegynder
26. maj 2004 - 22:37 #4
Rigeligt :)

Det var hvad man kalder en tanketorsk fra min side.
Avatar billede tchami Nybegynder
26. maj 2004 - 23:20 #5
Ahaa, nu kan jeg se hvad du mente om det var nok :)

De resterende felter er jo ikke nødvendigvis de rigtige.

Har du en smart måde at løse dette på?
Avatar billede arne_v Ekspert
26. maj 2004 - 23:29 #6
ID kan hentes med:

SELECT MAX(id),MAX(date),category FROM tabel GROUP BY category

problemet er headline.

Hvilken version af MySQL bruger du ?
Avatar billede tchami Nybegynder
26. maj 2004 - 23:34 #7
4.0.12 kører min udbyder..
Avatar billede tchami Nybegynder
26. maj 2004 - 23:36 #8
Kunne man måske lave en innerjoin på den samme tabel og på den måde komme frem til det rigtige resultat?
Avatar billede arne_v Ekspert
26. maj 2004 - 23:40 #9
Problemet er nemt at løse i MS SQLServer og MySQL 4.1.x, men det er et problem
i MySQL 3.x og 4.0.x ...
Avatar billede tchami Nybegynder
26. maj 2004 - 23:42 #10
Hmmm, så er jeg vist nødsaget til at bruge to queries og først hente headline ud i anden omgang, eller hvad siger du?
Avatar billede arne_v Ekspert
26. maj 2004 - 23:42 #11
En pragmatisk løsning vil muligvis være:

SELECT MAX(id),MAX(CONCAT(date,headline)),MAX(date),category FROM tabel GROUP BY category

og så lade din applikation (PHP elle rhvad det nu er) fjerne den første del
af anden kolonne

[utestet !]
Avatar billede arne_v Ekspert
26. maj 2004 - 23:44 #12
Du kan altid bruge med:

SELECT headline FROM tabel WHERE id = x

til at finde den headline som matcher til en given række fra 23:29:10
forslaget
Avatar billede tchami Nybegynder
26. maj 2004 - 23:53 #13
Jeg kigger på det.

Mange tak fordi du gav dig tid til det.
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
Computerworld tilbyder specialiserede kurser i database-management

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