[PHP] "SELECT * FROM ... WHERE datum = now() werkt niet.

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • ImmortalSoul
  • Registratie: Oktober 2005
  • Laatst online: 11-09 19:11
Ik gebruik deze query om verschillende waarde's uit een tabel te halen:

code:
1
$query = "SELECT * FROM agenda WHERE datum = now() OR datum > now() ORDER BY `agenda`.`Datum` ASC";


In PHP is het veld type gewoon "date".

Het enigste probleem is dat hij de items van vandaag niet weergeeft, terwijl hij dit wel zou moeten doen?

Acties:
  • 0 Henk 'm!

  • ufear
  • Registratie: December 2002
  • Laatst online: 11-09 16:35
Je haakje bij datum > now() staat fout, doe em eens andersom.

Ook kan je gewoon order by datum asc doen, maar mij lijkt desc logischer voor het weergeven van items, tenzij je een kalender of iets dergelijks bouwt.

[ Voor 55% gewijzigd door ufear op 13-02-2010 16:49 ]


Acties:
  • 0 Henk 'm!

  • raymondkrah
  • Registratie: Juli 2007
  • Laatst online: 10-09-2024
Volgens mij kan je dit probleem vrij simpel oplossen door je > teken te vervangen door >= en je now() vervangen voor date() omdat je mysql field een date is en geen datetime dus dat je de volgende query krijgt:

code:
1
SELECT * FROM agenda WHERE datum >= date() ORDER BY datum ASC";

[ Voor 21% gewijzigd door raymondkrah op 13-02-2010 16:54 ]


Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

ImmortalSoul schreef op zaterdag 13 februari 2010 @ 16:45:
In PHP is het veld type gewoon "date".
PHP heeft geen veldtype 'date'... Heb je het over mysql? Weet je zeker dat het een date en niet een datetime of timestamp is?

Hoedanook, in principe hoort je query te werken, maar dat hangt wel af van wat er precies in MySQL in de definities staan enzo. Je zou eventueel kunnen forceren dat MySQL met "middernacht, vandaag" werkt door CURRENT_DATE ipv 'now()' te gebruiken (en dan dus datum >= CURRENT_DATE, ipv die OR die nergens voor nodig is).

[ Voor 19% gewijzigd door ACM op 13-02-2010 16:55 ]


Acties:
  • 0 Henk 'm!

  • ImmortalSoul
  • Registratie: Oktober 2005
  • Laatst online: 11-09 19:11
Nee, dat had ik al geprobeerd maar die werkt ook niet.

Deze werkt ook niet:
code:
1
$query = "SELECT * FROM agenda WHERE datum >= now() ORDER BY `agenda`.`Datum` ASC";

Acties:
  • 0 Henk 'm!

  • raymondkrah
  • Registratie: Juli 2007
  • Laatst online: 10-09-2024
Ja inderdaad je hebt gelijk ACM. Ik betrapte mezelf ook al op die fout. Ik had mijn post al aangepast. 8)7

Acties:
  • 0 Henk 'm!

  • Solarsparc
  • Registratie: Juli 2001
  • Laatst online: 03:45
Nog een probleem waar je tegenaan kunt lopen is dat je agendaitems een tijd hebben, dus 13-02-2010 00:00 uur en dat now() de huidige tijd gebruikt, waardoor je deze items mist. Dan zou je of je agendaitems op 23:59 moeten zetten, of now() minus 12-24 moeten gebruiken.

Acties:
  • 0 Henk 'm!

  • HuHu
  • Registratie: Maart 2005
  • Niet online
NOW() is de huidige datum en tijd en niet de huidige datum (= vandaag).

Acties:
  • 0 Henk 'm!

  • ImmortalSoul
  • Registratie: Oktober 2005
  • Laatst online: 11-09 19:11
Sorry, ik bedoelde MySQL uiteraard.

CURRENT_DATE werkt :) hartstikke bedankt.

Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

HuHu schreef op zaterdag 13 februari 2010 @ 16:58:
NOW() is de huidige datum en tijd en niet de huidige datum (= vandaag).
Maar die zou alsnog bij het casten naar date goed moeten gaan vziw. Desalniettemin is CURRENT_DATE duidelijker in de query en weet je iig zeker van wat je op welk moment krijgt :)

Acties:
  • 0 Henk 'm!

  • Victor
  • Registratie: November 2003
  • Niet online
Kleine tip, niet gerelateerd aan je probleem: vermijd het gebruik van non-deterministische functies (zoals now(), curdate(), curtime(), enz.). Queries waarin zo'n functie gebruikt wordt, worden niet opgenomen in je query cache, wat ten koste gaat van de performance. Je kunt in zo'n geval beter de query voeden met de waarde uit bijv. de PHP functie date().

Zie ook: http://dev.mysql.com/doc/...uery-cache-operation.html

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

ACM schreef op zaterdag 13 februari 2010 @ 17:03:
[...]

Maar die zou alsnog bij het casten naar date goed moeten gaan vziw. Desalniettemin is CURRENT_DATE duidelijker in de query en weet je iig zeker van wat je op welk moment krijgt :)
Hij cast inderdaad, maar verkeerd om. Door de vergelijking met NOW(), welke een datetime teruggeeft, cast je impliciet je date-veld ook naar een datetime. Redelijk logisch dat het dan fout gaat, IMO. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • HuHu
  • Registratie: Maart 2005
  • Niet online
NMe schreef op zondag 14 februari 2010 @ 13:18:
[...]

Hij cast inderdaad, maar verkeerd om. Door de vergelijking met NOW(), welke een datetime teruggeeft, cast je impliciet je date-veld ook naar een datetime. Redelijk logisch dat het dan fout gaat, IMO. :)
Maakt het nog uit welke kant op je de vergelijking doet? Is het resultaat (rekening houdend met casting) van datum >= NOW hetzelfde als NOW() < datum? Of gaat die laatste in dit geval wel goed, omdat de casting dan wel de juiste kant op is.

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 10:54

Janoz

Moderator Devschuur®

!litemod

Het gaat over het casten, niet de vergelijking. Met 'verkeerd om' wordt bedoeld "DATE -> DATETIME" ipv "DATETIME -> DATE". Dit staat los van de volgorde van vergelijken. Om de cast richting aan te passen zul je hem expliciet moeten maken, of een andere functie gebruiken.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'

Pagina: 1