Avatar billede Mik2000 Professor
29. april 2009 - 23:27 Der er 5 kommentarer og
1 løsning

SQL / PHP sortering af data i database

Hej

Jeg har en database med følgende indhold (kan ikke ændres)
id
overskrift
nr
nr2

Denne skal sorteres når den hentes med SQL og det kan jeg godt.

Men problemet er her:
Jeg har et nummer gemt i en variabel på siden, når sqlen skal køres.

Der skal sorteres således:
De første skal være dem hvor nr i databasen er magen til det nummer jeg har i variablen, og af dem skal de første være der hvor nr 2 er mindst.

Hvordan kan man lave en sql der sortere på den måde?
Avatar billede CCodam Nybegynder
30. april 2009 - 00:37 #1
Du skal benytte dig af UNION, som kombinere 2 select statements:

$sql = "SELECT * FROM table WHERE nr = '$variable' ORDER BY nr2 UNION ALL SELECT * FROM table WHERE nr <> '$variable' ORDER BY nr2";

Hvis du har spørgsmål må du lige skrive :)
Avatar billede Mik2000 Professor
01. maj 2009 - 21:26 #2
Hej
Tak for svaret

Der blev lige ændret lidt i det

Nu er der en variabel der hedder:
uge med ugenummer f.eks. 12 (for uge 12)

Så er der en variabel kaldet:
nr - hvor der er et tal i

Sidst er der i databasen et felt kaldet:
nr2

----------------------------

Så skal der sorteres sådan:
1: Genrelt skal kun dem fra en speciel uge hentes - og i de næste 3 punkter er det kun dem der skal sorteres
---------
2: Først skal dem hvor nr i databasen der svarer til nummer variablen først. Af dem skal dem med det laveste tal i nr2 komme først
3: Herefter skal dem hvor nr ikke er 0 komme, igen sorteret efter dem med laveste nr2 først
4: Sidst skal dem med 0 i nr komme, endnu engang
sorteret efter dem med laveste nr2 først

Puha det var en ordentlig omgang så smider gerne ekstra point ind :)
Håber det er til at forstå, og håber det er til at forstå selvom det er lidt kompliceret.

Kan man det med union også, eller skal man gøre noget andet?
Avatar billede CCodam Nybegynder
01. maj 2009 - 21:42 #3
Puhh, ja det er også lidt svært for mig at holde hoved og hale i det du beskriver, men jeg har prøvet mig frem, og hvis det ikke er rigtigt, så må du jo lige prøve at beskrive præcist hvordan der skal sorteres lidt bedre :)

Men prøv med denne:

$sql = "SELECT * FROM table WHERE nr = ".$nr." ORDER BY nr2 ASC UNION ALL SELECT * FROM table WHERE nr <> ".$nr." AND nr <> '0'  ORDER BY nr2 ASC UNION ALL SELECT * FROM table WHERE nr = '0' ORDER BY nr2;"

Håber det virker for dig :)
Avatar billede Mik2000 Professor
01. maj 2009 - 22:18 #4
Den skriver:
#1221 - Incorrect usage of UNION and ORDER BY
Avatar billede CCodam Nybegynder
01. maj 2009 - 22:26 #5
#4 Det er også bare mig der tror SQL serveren, kan finde ud af hvad man mener :P

Prøv dette i stedet:
$sql = "(SELECT * FROM table WHERE nr = ".$nr." ORDER BY nr2 ASC) UNION ALL (SELECT * FROM table WHERE nr <> ".$nr." AND nr <> '0'  ORDER BY nr2 ASC) UNION ALL (SELECT * FROM table WHERE nr = '0' ORDER BY nr2);"
Avatar billede Mik2000 Professor
19. januar 2010 - 20:26 #6
Tak for hjælp
Har givet svar point for at lukke. Undskyld ventetiden og håber det er okat CCodam.

Ellers se om der kan hjælpes her:
http://www.eksperten.dk/spm/898834
Der er 100 point at tjene
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
Vi tilbyder markedets bedste kurser inden for webudvikling

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