Avatar billede daniel_d Nybegynder
05. juli 2009 - 13:35 Der er 2 kommentarer og
1 løsning

Kan man lave en limit for hver group i SQL

Hej

Jeg har en SQL som pt ser ud som følgende:

SELECT
    kategori.id AS kat_id,
    kategori.catname AS kat_navn,
    kategori.image AS kat_billede,
    kategori.publishedcat AS kat_publiseret,
    kategori.ordering AS kat_order,
    begivenhed.id AS b_id,
    begivenhed.catsid AS b_katid,
    begivenhed.dates AS dato,
    begivenhed.times AS start,
    begivenhed.titel AS titel
FROM jos_eventlist_categories AS kategori INNER JOIN jos_eventlist_dates AS begivenhed ON kategori.id = begivenhed.catsid
WHERE kategori.publishedcat = 1
GROUP BY kat_id, b_id

Hvilket giver

kategori.kat_id    kategori.kat_navn    kategori.kat_billede    kategori.kat_publiseret    kategori.kat_order    begivenhed.b_id    begivenhed.b_katid    begivenhed.dato    begivenhed.start    begivenhed.titel
1    OL    ikon_ol_2.png    1    4    1    1    01/07/2009    18:00:00    Danmark-Tyskland
1    OL    ikon_ol_2.png    1    4    9    1    06/11/2009    18:00:00    Danmark-Sverige
1    OL    ikon_ol_2.png    1    4    11    1    06/23/2009    19:00:00    sankt hans
2    Fodbold    Soccer.png    1    1    2    2    01/07/2009    18:00:00    Danmark-Tyskland
2    Fodbold    Soccer.png    1    1    3    2    06/11/2009    18:00:00    Danmark-Sverige
2    Fodbold    Soccer.png    1    1    5    2    06/11/2009    19:00:00    Norge-Finland
2    Fodbold    Soccer.png    1    1    6    2    06/18/2009    18:00:00    Frankrig-Italien
2    Fodbold    Soccer.png    1    1    8    2    06/19/2009    18:00:00    Island-Tyskland
2    Fodbold    Soccer.png    1    1    10    2    06/06/2009    20:00:00    Sverige - Danmark
2    Fodbold    Soccer.png    1    1    12    2    06/11/2009    20:00:00    Sverige - Malta test
2    Fodbold    Soccer.png    1    1    13    2    06/11/2009    20:00:00    Sverige - Malta test2
2    Fodbold    Soccer.png    1    1    15    2    06/11/2009    20:00:00    Sverige - Malta test3
2    Fodbold    Soccer.png    1    1    16    2    06/11/2009    20:00:00    Sverige - Malta test4
3    Tennis    Tennis.png    1    2    4    3    06/19/2009    18:00:00    tennis test
5    Golf    Golf.png    1    6    18    5    07/16/2009    18:00:00    Golf mig her og der
8    Haandbold        1    3    7    8    07/16/2009    19:00:00    H√•ndbold NO-DK
8    Haandbold        1    3    17    8    06/30/2009    21:00:00    H√•ndbold test
9    H√•ndbold        1    9    19    9    07/16/2009    18:00:00    H√•ndbold test 2

Nu kunne jeg godt tænke mig at lave en LIMIT for HVER gruppe, så der f.eks. kun vises max 5 resultater fra fodbold, 5 resultater fra OL osv. osv.

Er der nogen der kan hjælpe mig med at lave den SQL?
Avatar billede daniel_d Nybegynder
05. juli 2009 - 14:04 #1
Ved at kigge på et par eksempler fundet på nettet, så ser det ud som om jeg kan komme omkring det via mysql variabler, men jeg mangler at få force index til at virke i min sql her:

SET @num := 0, @kategori := '';
SELECT
    kategori.id AS kat_id,
    kategori.catname AS kat_navn,
    kategori.image AS kat_billede,
    kategori.publishedcat AS kat_publiseret,
    kategori.ordering AS kat_order,
    begivenhed.id AS b_id,
    begivenhed.catsid AS b_katid,
    begivenhed.dates AS dato,
    begivenhed.times AS start,
    begivenhed.titel AS titel,
    @num := if(@kategori = kategori.catname, @num + 1, 1) as row_number,
    @kategori := kategori.catname as dummy
FROM jos_eventlist_categories AS kategori LEFT JOIN jos_eventlist_dates AS begivenhed ON kategori.id = begivenhed.catsid FORCE INDEX(kat_navn) 
WHERE kategori.publishedcat = 1
GROUP BY kat_id, b_id
having row_number <= 5

Er der nogen kloge hoveder der kan fortælle hvor force index skal være og evt. skrives???

hilfe
Avatar billede daniel_d Nybegynder
05. juli 2009 - 14:24 #2
Lukker, og opretter en tråd med en mere retvisende titel om force index med joins
Avatar billede daniel_d Nybegynder
05. juli 2009 - 14:27 #3
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