20. februar 2014 - 22:26Der er
8 kommentarer og 1 løsning
Speciel dobbelt ORDER BY i MySQL
Hej,
Jeg har en tabel med 3 kolonner: ID (xx) DATE (xxxx-xx-xx) OPENED (0/1)
Jeg ønsker at sortere tabellen efter DATE (nyeste først) - dertil ønsker jeg så, hvis OPENED er 0 (nul), inden for de sidste 5 dage, skal disse øverst (altså en form for overruling/første prioritet).
........eller refererer du ikke til åbningstidspunktet, men til rækker i tabellen, hvor datoen er højst fem dage gammel og opened er 0? Og vil du, at disse rækker skal stå øverst, i dato rækkefølge, efterfulgt af alle andre rækker i datorækkefølge? I så fald vil jeg foreslå en løsning med UNION. Nu er det nogen tid siden jeg har været i gang med at beregne datoer (og jeg har drukket for mange øller til at starte nu), så jeg skriver i pseudokode, noget i retning af dette:
SELECT * FROM minTabel WHERE [datoen er højst fem dage gammel] AND opened = 0 ORDER BY date UNION SELECT * FROM minTabel WHERE ID NOT IN (SELECT ID FROM minTabel WHERE [datoen er højst fem dage gammel] AND opened =0) ORDER BY date
IF [spørgeren bekræfter, at dette er problemstillingen] AND [du er rimelig enig i princippet i min pseudokode] AND ([du har dato beregninger på fingerspidserne] OR [du har drukket færre øller end mig]) THEN [så kan du gøre koden færdig og få spørgsmålet lukket]
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.