[php/MySQL] BETWEEN met begin- en einddatum van de week

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • TheNephilim
  • Registratie: September 2005
  • Laatst online: 11:37
Het is echt vrijdagmiddag merk ik al wel, nu kom ik een bug tegen op 1 van onze projecten en ik snap het probleem niet zo.

PHP:
1
WHERE `rxl`.`date` BETWEEN '".date("Y-m-d", strtotime("monday this week"))."' AND '".date("Y-m-d", strtotime("sunday this week"))."'


We hebben meerdere log entries, één per dag. Nu wil ik alle records hebben die binnen 1 week plaatsvinden, de huidige week. De bovenstaande oplossing werkt niet op Zondag :+

Echter;

PHP:
1
echo date("Y-m-d", strtotime("monday this week"))."' AND '".date("Y-m-d", strtotime("sunday this week"));


geeft terug: 2011-10-17' AND '2011-10-23

Kortom, dat moet toch werken of zie ik iets over het hoofd?

Oplossing gevonden! 'monday next week' ipv 'sunday this week'

[ Voor 4% gewijzigd door TheNephilim op 21-10-2011 17:15 ]


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Between doet aan TOT en niet Tot en met. Je wil dus gewoon van maandag tot maandag ;) Zelfs zonder de documentatie er op na te slaan moet je met een beetje logisch nadenken toch wel tot die conclusie kunnen komen lijkt me...

[ Voor 41% gewijzigd door RobIII op 21-10-2011 17:12 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • DumbAss
  • Registratie: April 2002
  • Laatst online: 16-08 11:30
Ik denk dat het er between moet zitten.
Dus 2011-10-17 00:00:00 tot en met 2011-10-22 23:59:59

Vanutsteen.nl => nerds only | iRacing


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
DumbAss schreef op vrijdag 21 oktober 2011 @ 17:11:
Ik denk dat het er between moet zitten.
Dus 2011-10-17 00:00:00 tot en met 2011-10-22 23:59:59
Gewoon "between 2011-10-17 and 2011-10-24". Rocket science.
This is equivalent to the expression (min <= expr AND expr <= max)

[ Voor 22% gewijzigd door RobIII op 21-10-2011 17:16 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • TheNephilim
  • Registratie: September 2005
  • Laatst online: 11:37
RobIII schreef op vrijdag 21 oktober 2011 @ 17:11:
Between doet aan TOT en niet Tot en met. Je wil dus gewoon van maandag tot maandag ;) Zelfs zonder de documentatie er op na te slaan moet je met een beetje logisch nadenken toch wel tot die conclusie kunnen komen lijkt me...
Ah wat stom! Ik ga het wijzigen en dan zien of hij zondag nu netjes meetelt. Bedankt voor je input! :D

PHP:
1
WHERE `rxl`.`date` BETWEEN '".date("Y-m-d", strtotime("monday this week"))."' AND '".date("Y-m-d", strtotime("monday next week"))."'

Acties:
  • 0 Henk 'm!

  • MichielioZ
  • Registratie: Augustus 2001
  • Laatst online: 15-06 23:12
Ik weet niet of je ook met weeknummers werkt, maar anders is de functie YEARWEEK() echt een uitkomst...
Zie hier: http://dev.mysql.com/doc/...ns.html#function_yearweek

Iedereen wil terug naar de natuur, maar niemand wil lopend...


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
MichielioZ schreef op zaterdag 22 oktober 2011 @ 18:05:
Ik weet niet of je ook met weeknummers werkt, maar anders is de functie YEARWEEK() echt een uitkomst...
Zie hier: http://dev.mysql.com/doc/...ns.html#function_yearweek
Behalve dat je bij de jaaromslag altijd ellende hebt ;) Dan zit je opeens met een halve week.

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • MichielioZ
  • Registratie: Augustus 2001
  • Laatst online: 15-06 23:12
RobIII schreef op zaterdag 22 oktober 2011 @ 18:18:
[...]

Behalve dat je bij de jaaromslag altijd ellende hebt ;) Dan zit je opeens met een halve week.
Heb ik nog geen problemen mee gehad eerlijk gezegd, maar ik bepaal het weeknummer dan ook met PHP vanuit een datum (en dan de juiste "mode" gebruiken natuurlijk).
Van de link die ik gaf:
"The year in the result may be different from the year in the date argument for the first and the last week of the year.".

Iedereen wil terug naar de natuur, maar niemand wil lopend...


Acties:
  • 0 Henk 'm!

  • cariolive23
  • Registratie: Januari 2007
  • Laatst online: 18-10-2024
RobIII schreef op vrijdag 21 oktober 2011 @ 17:11:
Between doet aan TOT en niet Tot en met. Je wil dus gewoon van maandag tot maandag ;) Zelfs zonder de documentatie er op na te slaan moet je met een beetje logisch nadenken toch wel tot die conclusie kunnen komen lijkt me...
Hmmm, mét documentatie kom ik toch echt tot een andere conclusie:
This is equivalent to the expression (min <= expr AND expr <= max) if all the arguments are of the same type.
Dit is volgens de documentatie dus een "tot en met".

Acties:
  • 0 Henk 'm!

  • Raynman
  • Registratie: Augustus 2004
  • Nu online
cariolive23 schreef op zaterdag 22 oktober 2011 @ 20:46:
[...]

Hmmm, mét documentatie kom ik toch echt tot een andere conclusie:

[...]
Dit is volgens de documentatie dus een "tot en met".
Klopt, maar misschien is rxl.date een DATETIME, terwijl de met PHP gegenereerde vergelijkingswaarde alleen het DATE-deel bevat?
Prior to MySQL 5.1.18, when DATE values are compared with DATETIME values, the time portion of the DATETIME value is ignored, or the comparison could be performed as a string compare. Starting from MySQL 5.1.18, a DATE value is coerced to the DATETIME type by adding the time portion as '00:00:00'. To mimic the old behavior, use the CAST() function to cause the comparison operands to be treated as previously.
Pagina: 1