Avatar billede frexxit Juniormester
28. september 2022 - 08:27 Der er 9 kommentarer og
1 løsning

ORDER BY IF mm.

Hej Eksperter.

Jeg har en lille udfordring, nok mest for mig selv, jeg har en tabel med længder i, og dem skal jeg have vist på en resultat side, men hvordan får jeg dem vist i den rigtige rækkefølge..

id, pull_off, pull_off_2, pull_off_3
dataene kan være som følgende:

Case 1:
1, 115.45, 112,54, 98,75
2, 98,87, EMPTY , EMPTY
3, 113,58, 116,83, 68,78

Placeringen vil være som følgende:
1. = ID: 1
2. = ID: 3
3. = ID: 2

en anden kan være sådan her:
case 2:
4, 115.45, 112,54, EMPTY
5, 98,87, EMPTY , EMPTY
6, 113,58, 116,83, EMPTY

Placeringen vil være som følgende:
1. = ID: 6
2. = ID: 4
3. = ID: 5

håber det giver mening og nogle kan hjælpe.. jeg kan simpelthen ikke få den til at ORDER BY i rigtig rækkefølge... har prøvet med COALESCE osv..

Pfh TAK
Avatar billede michael_stim Ekspert
28. september 2022 - 09:10 #1
Nu har jeg ikke testet, tænker bare højt her. Måske man kunne lave en COUNT og så ORDER BY COUNT først?
Avatar billede arne_v Ekspert
28. september 2022 - 13:36 #2
Maaske:

SELECT id
FROM tab el
ORDER BY (IF(pull_off IS NULL, 0, 1)+IF(pull_off_2 IS NULL, 0, 1)+IF(pull_off_3 IS NULL, 0, 1)) DESC, id ASC
Avatar billede frexxit Juniormester
28. september 2022 - 18:03 #3
Tak for jeres input, det virkede desværre ikke. :(


Problemet er når man har resultater i alle "pull_off"  og så der kun er fx 2 der er gået videre til pull_off_2, så skriver den de NULL felter øverst. OG...

Når man så har 3 i pull_off og to kommer til pull_off_2 og så kommer videre igen til pull_off_3, men resultatet i pull_off_3 er lavere end pull_off_2, så går det helt i kage :P

Håber det giver lidt mening..
Avatar billede frexxit Juniormester
28. september 2022 - 18:06 #4
et link til noget test er her: http://mejlkjaer.dk/traktor/test.php
Avatar billede arne_v Ekspert
28. september 2022 - 19:30 #5
Kan du forklare kriteriet for sorteringen?

Det er nemlig stadig ikke klart for mig.
Avatar billede frexxit Juniormester
29. september 2022 - 14:29 #6
hej Arne..

Ja jeg prøver lidt så godt jeg kan :P

Pull off er finalen, hvis de kører over 100 meter skal de kører igen, men kun dem der har kørt over de 100 meter.
Det vil sige at hvis 3 er i finalen, og 2 af dem trækker over 100 meter, så skal de to kører igen i pull off 2, skulle de begge så trække over 100 meter igen, så 3. gang, og her er det så afgjort.

lad os sige der er 5 med i pull off..
Traktor 1, 2, 3, 4 og 5.
traktor: 1 trækker 89 meter
traktor: 2 trækker 78meter
traktor: 3 trækker 104 meter
traktor: 4 trækker 105 meter
traktor: 5 trækker 118 meter

Pull off 2 ser så sådan her ud. og de trækker igen.
traktor: 3 trækker 38 meter
traktor: 4 trækker 101 meter
traktor: 5 trækker 115 meter

Så skal de to kører igen i pull off 2.. og traktor 3 får nu en 3. plads.
traktor: 4 trækker 75 meter
traktor: 5 trækker 32 meter

Det betyder så at placeringen vil være som følgende:

1. plads: traktor 4 med 75 meter
2. plads: traktor 5 med 32 meter
3. plads: traktor 3 med 38 meter.

Håber det giver mening. og MySQL struktur kan vi lave om så den passer hvis det nuværende ikke kan lade sig gøre..
Avatar billede Rune1983 Ekspert
29. september 2022 - 14:52 #7
Er det ikke bare en
SELECT * FROM tbl_traktorPull
ORDER BY
IFNULL(pull_off_3,0) DESC,
IFNULL(pull_off_2,0) DESC,
IFNULL(pull_off,0) DESC
Avatar billede michael_stim Ekspert
29. september 2022 - 15:08 #8
id, pull_off, pull_off_2, pull_off_3 <- Er det ét felt? Hvis ja, så skal du nok bryde det ud.
Avatar billede frexxit Juniormester
29. september 2022 - 15:14 #9
jo det er felter fra MySql.

Rune1983, jo men når den så tager fra pull_off_3 og der kun er 2, og hvis en af dem er kortere end den fra pull_off_2, så laver den forkert placering..
Avatar billede frexxit Juniormester
29. september 2022 - 15:39 #10
Rune1983 - Du her HELT ret.. hold kæft så simpelt.. har prøver med ALT muligt som ikke virkede, men så var det så simpelt.. det er 100% i orden sådan der :P

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

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