/ 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
Mysql: 10 af hver slaks
Fra : Anders Lund


Dato : 11-02-02 14:48

Jeg bruger mysql
Jeg har en tabel med ca 50.000 poster, den er ud som følger
-id int primær nøjle
-name char
-kategori int (kan være fra 1-10 alt efter hvilken kategori posten tilhøre)
fremmednøjle

Jeg kunne godt tænke mig at få en lidste med de tid nyeste (med højest id)
fra hver kategor. Hvordan gør jeg det uden at skulle lave 10 databasen kald?

Mvh
Anders Lund





 
 
Nis Jorgensen (11-02-2002)
Kommentar
Fra : Nis Jorgensen


Dato : 11-02-02 18:20

On Mon, 11 Feb 2002 14:48:18 +0100, "Anders Lund" <anders@itnews.dk>
wrote:

>Jeg bruger mysql
>Jeg har en tabel med ca 50.000 poster, den er ud som følger
>-id int primær nøjle
>-name char
>-kategori int (kan være fra 1-10 alt efter hvilken kategori posten tilhøre)
>fremmednøjle
>
>Jeg kunne godt tænke mig at få en lidste med de tid nyeste (med højest id)
>fra hver kategor. Hvordan gør jeg det uden at skulle lave 10 databasen kald?

SELECT id, name, kategori FROM tabel t1
WHERE 10 < (SELECT COUNT(*) FROM tabel t2 WHERE t1.kategori =
t2.kategori AND t1.id < t2.id);

Uden subselects kan det fx goeres saadan her:

SELECT t1.id, t1.name, t1.kategori, count(*) FROM tabel t1 INNER JOIN
tabel t2 ON t1.kategori = t2.kategori
WHERE t1.id <= t2.id
GROUP BY t1.id, t1.name, t1.kategori
HAVING count(*) <= 10;

(Det er faktisk ogsaa lidt koennere efter min mening ...)

--
Nis Jorgensen
Amsterdam

Please include only relevant quotes, and reply below the quoted text. Thanks

Anders Lund (12-02-2002)
Kommentar
Fra : Anders Lund


Dato : 12-02-02 00:19

Nis Jorgensen <nis@dkik.dk> skrev i en
nyhedsmeddelelse:3vuf6u8f59daa6heqo2vkatd7chvkl3imh@4ax.com...

> >Jeg kunne godt tænke mig at få en lidste med de tid nyeste (med højest
id)
> >fra hver kategor. Hvordan gør jeg det uden at skulle lave 10 databasen
kald?
Ups, tænk hvad en lille tastafejl kan forvolde, jeg mente 10 nyeste ikke
"tid nyeste".

Horfor har du forresten "WHERE t1.id <= t2.id" med i dit kald?

Mvh
Anders Lund



Nis Jorgensen (12-02-2002)
Kommentar
Fra : Nis Jorgensen


Dato : 12-02-02 13:20

On Tue, 12 Feb 2002 00:18:58 +0100, "Anders Lund" <anders@itnews.dk>
wrote:

>Horfor har du forresten "WHERE t1.id <= t2.id" med i dit kald?

Den skal laeses sammen med GROUP BY og HAVING:

WHERE t1.id <= t2.id

For hver post i t1, udvaelg de poster i t2 der er i samme kategori
(via JOIN) og med hoejere (eller samme) ID.

GROUP BY t1.id, t1.name, t1.kategori

Grupper efter vaerdierne i den oprindelige post

HAVING count(*) <= 10;

Udvaelg de poster der er i top 10 = har max 10 poster der opfylder
where-klausen
--
Nis Jorgensen
Amsterdam

Please include only relevant quotes, and reply below the quoted text. Thanks

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

Månedens bedste
Årets bedste
Sidste års bedste