Avatar billede Slettet bruger
16. september 2011 - 14:47 Der er 7 kommentarer og
1 løsning

Kan dette lade sig gøre?

Ja undskyld overskriften. Men kunne ikke formulere en overskrift som var passende til mit spørgsmål.

Jeg har en tabel i min database hvor jeg har nogle forskellige oplysninger. Jeg har måske 30 personer med hver deres point fordelt i 2 typer.
ex:
[id]-[person]-[type]-[point]
1 - Person 1 - 1 - 140
2 - Person 2 - 1 - 120
3 - Person 3 - 2 - 160
4 - Person 4 - 1 - 190
5 - Person 5 - 2 - 90
6 - Person 6 - 2 - 100
osv..

Jeg ville gerne lave en udtrækning hvor jeg finder den person af type 2 der har 3 flest point og den person af type 1 der har 4 flest point. Og så printe den af de 2 der har flest point.

Jeg har lavet det i PHP men det fylder bare meget, og det kunne jo være at der var en nemmere måde via MySQL.

Kan det lade sig gøre i MySQL eller skal jeg bruge PHP eller ASP til hjælp?
Avatar billede arne_v Ekspert
16. september 2011 - 14:51 #1
SELECT person,point
FROM dintabel
WHERE id IN (SELECT id FROM dintabel t1 WHERE point = (SELECT MAX(point) FROM dintabel t2 WHERE t2.type=t1.type))

burde reducere behovet for app logik en del
Avatar billede Slettet bruger
16. september 2011 - 15:31 #2
Takker.
Du må gerne svare
Avatar billede arne_v Ekspert
16. september 2011 - 15:41 #3
det virkede ?
Avatar billede Slettet bruger
16. september 2011 - 16:35 #4
Der var jeg lidt for hurtig.
Jeg kan ikke helt få det til at virke som jeg gerne vil.

Jeg kan ikke helt se hvordan du der vælger den person der har 4 flest point af type 1'erne og den der har 3 flest point ved type 2'erne.
Avatar billede arne_v Ekspert
16. september 2011 - 19:01 #5
Den finder alle dem som har flest point indenfor hver type.

Du vil finde dem som har 3. og 4. flest point??
Avatar billede Slettet bruger
16. september 2011 - 19:07 #6
Jeps..
Altså det er fordi jeg skal vælge 6 personer.
De bedste 2 Type 1'er
de bedste 3 Type 2'er
Og den sidste skal være enten den tredje bedste type 1 eller den fjedre bedste type 2.
Avatar billede arne_v Ekspert
17. september 2011 - 17:15 #7
Du bliver nok noedt til at have lidt app logik, men proev om dette indskraenker data maengden lidt:

SELECT person,point
FROM dintabel t1
WHERE 4 > (SELECT COUNT(*) FROM dintabel t2 WHERE t2.type=t1.type AND t2.point<t1.point)
Avatar billede arne_v Ekspert
14. oktober 2011 - 23:50 #8
OK?
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