[MYSQL] Sorteren op datum

Pagina: 1
Acties:

  • DaMinD
  • Registratie: Januari 2002
  • Laatst online: 29-01 09:18
Ik heb een table met daarin een startdate en een enddate

Nu wil ik alle rows hebben waarbij de huidige datum tussen de startdate en enddate ligt. Het probleem is hem dat ik zo wil sorteren dat ik eerste de rows krijg met een starttime die op of na de huidige ligt en daarna pas de rows met een startdate voor de huidige datum.

Dit heb ik nu:
code:
1
2
3
4
5
6
7
8
9
SELECT *
FROM 
  table
WHERE
  (( '".$enddate."' <= startdate AND '".$startdate."' >= startdate ) 
  OR ( '".$enddate."' <= enddate AND '".$startdate."' >= enddate )
  OR ( '".$enddate."' >= startdate AND '".$startdate."' <= enddate ) )
ORDER BY
  startdate

Dus het gaat om het sorteren niet om de rows selecten, dat werk.

[ Voor 20% gewijzigd door DaMinD op 23-06-2006 11:04 ]


  • wica
  • Registratie: Februari 2002
  • Laatst online: 14-01 16:59

wica

De duivel jacht op me

[rml][ PHP & MySQL] Valt periode in andere periode?[/rml]

Misschien heb je hier wat aan

/edit
Sorry verkeerd gelezen

[ Voor 14% gewijzigd door wica op 23-06-2006 11:04 ]

RFC | The Linux Document Project | gentoo.


  • Dido
  • Registratie: Maart 2002
  • Nu online

Dido

heforshe

Ik denk dat het eenvoudigste is om dat met twee queries en een UNION te doen.

Wat betekent mijn avatar?


  • cameodski
  • Registratie: Augustus 2002
  • Laatst online: 06-11-2023
Dan moet je een dummy kolom toevoegen aan je resultset die je afhankelijk van je datum vult met bijvoorbeeld 1 en 2.
Vervolgens kun je dan eerst op deze dummy kolom sorteren en daarna op startdate.

Een UNION werkt niet, omdat je een UNION als geheel weer zult moeten sorteren en dan hetzelfde probleem hebt, tenzij je ook hierin een dummy kolom opneemt. Overigens kun je het beste dan wel even UNION ALL gebruiken.

Never underestimate the power of


  • wica
  • Registratie: Februari 2002
  • Laatst online: 14-01 16:59

wica

De duivel jacht op me

@cameodski
Dus je bedoelt dit?

code:
1
2
3
4
5
6
7
8
9
SELECT startdate, startdate as dummy, ....
FROM 
  table
WHERE
  (( '".$enddate."' <= startdate AND '".$startdate."' >= startdate ) 
  OR ( '".$enddate."' <= enddate AND '".$startdate."' >= enddate )
  OR ( '".$enddate."' >= startdate AND '".$startdate."' <= enddate ) )
ORDER BY
  dummy,startdate

RFC | The Linux Document Project | gentoo.


  • DaFireball
  • Registratie: Januari 2006
  • Laatst online: 13-09-2022
Kan in MySQL niet zoiets als BETWEEN?

zoies zeg maar:

SELECT *
FROM Store_Information
WHERE Date BETWEEN 'Jan-06-1999' AND 'Jan-10-1999'

  • DaMinD
  • Registratie: Januari 2002
  • Laatst online: 29-01 09:18
@wica
Ik zie niet hoe de dummy anders is dan startdate.
Als ik zou gaan sorteren op dummy,startdate zou dat dan toch het zelfde zijn?

Mischien is het iets om de dagen te tellen en dan te sorteren op het laagst aantal dagen.

  • cameodski
  • Registratie: Augustus 2002
  • Laatst online: 06-11-2023
Je moet in de dummy kolom een soort if opnemen, zodat dummy bijvoorbeeld 1 is als de startdate >= huidige datum en 2 als de startdate < huidige datum.

Vervolgens kun je dan sorteren op dummy, startdate.

Overigens vraag ik me wel af hoe je ooit een startdate terug kunt krijgen die na de huidige datum valt, want je zegt ook dat je huidige datum tussen de startdate en enddate moeten liggen. Dus zal je startdatum altijd <= huidige datum moeten zijn.

Never underestimate the power of


  • moozzuzz
  • Registratie: Januari 2005
  • Niet online
DaMinD schreef op vrijdag 23 juni 2006 @ 10:57:
SQL:
1
  ( $endlimit <= startdate AND $startlimit >= startdate ) 
1.
Klopt uw where wel? (of heb je "negatieve" periodes?)

2.
SQL:
1
2
3
SELECT  ... , $startlimit AS startlimit
...
ORDER BY startlimit

oid?

[ Voor 5% gewijzigd door moozzuzz op 23-06-2006 11:57 ]


  • DaMinD
  • Registratie: Januari 2002
  • Laatst online: 29-01 09:18
Ja er zitten negative periodes bij.

Heb de oplossing:
SQL:
1
CASE WHEN startdate >= CURDATE() THEN '0' ELSE '1' END as test

Nu kan ik een orderby op test geven. En ja het werkt :)

[ Voor 36% gewijzigd door DaMinD op 23-06-2006 12:06 ]


  • DaMinD
  • Registratie: Januari 2002
  • Laatst online: 29-01 09:18
--

[ Voor 175% gewijzigd door DaMinD op 23-06-2006 13:55 ]

Pagina: 1