Avatar billede lsskaarup Nybegynder
11. maj 2005 - 09:39 Der er 14 kommentarer og
1 løsning

3 felter skal samles til en lidt speciel sortering

Jeg har 3 felter, som enten udfyldt, tomme eller NULL. Dem skal jeg have sorteret på følgende måde (hvis det er til at se):

s t p
-----
x x x
  x x
x x
x  x
    x
  x
x

Altså først, hvor alle 3 er sat, så de 2 sidste, så de 2 første, den den første og sidste. Til sidste hvor kun en er sat, startende bagfra.
Avatar billede lsskaarup Nybegynder
12. maj 2005 - 10:16 #1
Ingen som kan hjælpe mig?
Avatar billede jakobdo Ekspert
13. maj 2005 - 09:27 #2
Hvordan man lige skal lave det 100% ved jeg ikke.
Men jeg kunne tænke mig til noget i stil med:

HVIS felt1 og felt2 og felt3 er ULIG NULL og ikke TOMT, så skal den have en værdi, f.eks. 0.
Hvis felt1 er NULL eller TOMT, og felt2 og felt3 ikke er, så værdi 1
osv...
Du burde kunne bruge IF sætningerne fra den anden løsning du fik af mig.
Avatar billede lsskaarup Nybegynder
13. maj 2005 - 09:35 #3
Okay, så den vil være noget lig IF((felt1 != "" && felt2 != "" && felt3 != ""),1,0) og så videre ned ad med henholdsvis && / || ?
Avatar billede jakobdo Ekspert
13. maj 2005 - 10:43 #4
Du skal også teste på IS NULL
Men det bliver noget i den dur.
Men det ender vel med at blive en masse:

IF ELSE...

Kig evt på denne side: http://dev.mysql.com/doc/mysql/en/control-flow-functions.html

Måske du dog skal overveje at bruge:
CASE value WHEN [compare-value] THEN result [WHEN [compare-value] THEN result ...] [ELSE result] END  , CASE WHEN [condition] THEN result [WHEN [condition] THEN result ...] [ELSE result] END
Avatar billede lsskaarup Nybegynder
13. maj 2005 - 10:48 #5
Øh, den sidste der med CASE, den er jeg ikke lige med på.
Avatar billede jakobdo Ekspert
13. maj 2005 - 11:42 #6
Måske det skal være if elseif elseif osv...
Den anden er jeg også lidt lost på! :o)
Avatar billede jakobdo Ekspert
13. maj 2005 - 12:23 #7
Den er ikke køn, men det giver faktisk det resultat du ønsker:

$query = mysql_query("
SELECT
    *
FROM
    test
ORDER BY
IF(
    ((felt1 != '')
AND
    (felt2 != '')
AND
    (felt3 != ''))
    ,0,
    IF(
        ((felt1 != '')
    AND
        (felt2 != ''))
    ,1,
        IF(
            ((felt2 != '')
        AND
            (felt3 != ''))
        ,2,
            IF(
                ((felt1 != '')
            AND
                (felt3 != ''))
            ,3,
                IF(
                    (felt1 != '')
                ,4,IF(
                    (felt2 != '')
                ,5,IF(
                    (felt3 != '')
                ,6,7)))
            )
        )
    )
)
");

Den skal dog rettes til din navne.
Og hvis du vil have den til at sortere anderledes, er det jo blot at rette navnene!

Men jeg fandt ud af at IS NULL ikke er god!
!= '' er nok.
Avatar billede lsskaarup Nybegynder
13. maj 2005 - 12:47 #8
OKAY, jamen den vil jeg da lige prøve. Utroligt hvad en pause kan gøre, jeg regnede med at skulle se på den nu, men hvis din virker så er det jo bare fantastisk.

Skønheden er som du måske har opfanget lidt ligegyldig, bare det virker.
Avatar billede lsskaarup Nybegynder
13. maj 2005 - 13:37 #9
Øv, den virker ikke helt, men kan nok skyldes, at felterne når de ikke er sat, både kan være 0 eller NULL.

Hmm måske skulle jeg ændre dette, så de har en standardværdi lig 0.
Avatar billede lsskaarup Nybegynder
13. maj 2005 - 13:42 #10
Ahh, men det skyldes nok en fejler fra min side, felterne er jo sådan set ikke tomme, som jeg skrev tidligere, men altså 0, NULL eller 1.
Avatar billede lsskaarup Nybegynder
13. maj 2005 - 13:50 #11
Yes, nu har jeg ændret '' til '0', og så virker det.

Du køre sgu med klatten, jakobdo.
Avatar billede jakobdo Ekspert
13. maj 2005 - 14:21 #12
Jeg har aldrig rigtigt brugt IF i SQL før, så jeg har også lært noget må man sige!
Men jeg forsøger sgu da! :o)
Avatar billede lsskaarup Nybegynder
13. maj 2005 - 16:58 #13
Ligger du et svar, jakobdo
Avatar billede jakobdo Ekspert
13. maj 2005 - 17:25 #14
Svar...
Avatar billede jakobdo Ekspert
14. maj 2005 - 09:08 #15
Takker for point!
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