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