login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Ingewikkelde query over datums!

Offline Chupskie - 23/11/2006 11:17
Avatar van ChupskieMySQL beginner Hallo,
Ik heb in mijn database, de datums als datetime erinstaan.
Nu heb ik daarvan alleen de datum nodig, dat heb ik zo opgelost:
DATE_FORMAT('$datum', '%d-%m-%Y') AS datum

Ik wil nu vergelijken met de datum uit het DB, en de datum van vandaag. Ik wil dat alleen de datums van vandaag geselecteerd worden. Nu heb ik al dit: (met een if else je opgelost!)

22-11-2006 = 23-11-2006 = Eerder!
22-11-2006 = 23-11-2006 = Eerder!
23-11-2006 = 23-11-2006 = Vandaag!

Maar nu wil ik dus ook echt alleen maar de datums die gelijk zijn aan vandaag worden geselecteerd.
Ik heb daarvoor de volgende query:

  1. $result = mysql_query("SELECT DATE_FORMAT('datum', '%d-%m-%Y') AS datum FROM kopers WHERE DATE_FORMAT('datum', '%d-%m-%Y') = '".$datumnu."' AND $ip='".$_SERVER['REMOTE_ADDR']."' ORDER BY datum ") or die(mysql_error());


Maar hiermee, krijg ik niet alleen de datums die overheen komen, met de datum vandaag?
Weet iemand hier een oplossing voor?

10 antwoorden

Gesponsorde links
Offline Gerard - 23/11/2006 11:40
Avatar van Gerard Ouwe rakker Zoek op MySQL Documentation eens iets op over CURDATE().
Offline Stijn - 23/11/2006 11:43 (laatste wijziging 23/11/2006 11:44)
Avatar van Stijn PHP expert
  1. SELECT datum, CASE WHEN DATEDIFF( CURRENT_DATE() , 'datum') = 0 THEN datum = 'nu' WHEN DATEDIFF( CURRENT_DATE() , 'datum') > 0 THEN datum ='later' FROM <table>


php

  1. <?
  2. if( $row['datum'] == 'nu' )
  3. ....
  4. ?>


(zoiets?)
Offline Chupskie - 23/11/2006 12:08 (laatste wijziging 23/11/2006 12:34)
Avatar van Chupskie MySQL beginner
  1. $result22 = mysql_query("
  2. SELECT datum, CASE
  3. WHEN DATEDIFF( CURRENT_DATE() , 'datum') = 0
  4. THEN datum = 'nu'
  5. WHEN DATEDIFF( CURRENT_DATE() , 'datum') > 0
  6. THEN datum ='later' END
  7. FROM kopers
  8. ") or die(mysql_error());


Ik krijg nu dit: 2006-11-23 15:48:40 ipv 2006-11-23 ??
Hoe kan ik dit oplossen?
Offline Gerard - 23/11/2006 13:32
Avatar van Gerard Ouwe rakker door te werken met DATE_FORMAT() bij je SELECT datum. 
Daarmee kan je het format (goh?) van je date (goh?) aanpassen. 
Offline marten - 23/11/2006 13:37
Avatar van marten Beheerder Heb al meerdere malen aangegeven om in de categorie MySQL even die twee tutorials door te lezen. (Blijkbaar lees je ze niet, of lees je met je oren of iets dergelijks)
Offline Chupskie - 23/11/2006 13:51 (laatste wijziging 23/11/2006 13:53)
Avatar van Chupskie MySQL beginner Heey marten, ik heb het pas wel begrepen.
Ik had toen de volgende date format:

DATE_FORMAT('datum', '%d-%m-%Y') gebruikt.. dankzij jou hulp 

Maar de vraag is hoe krijg ik die date format goed hierin verwerkt, wat dat lukte me niet. Ik heb je tutorial echt wel gelezen, en ik heb er ook best veel van geleerd.
Maar het lukt me niet dit te combineren?

Iemand een idee?
edit:
Dan krijg je dus zoiets:
  1. $result22 = mysql_query("
  2. SELECT DATE_FORMAT('datum', '%d-%m-%Y') AS datum, CASE
  3. WHEN DATEDIFF( CURRENT_DATE() , 'datum') = 0
  4. THEN datum = 'nu'
  5. WHEN DATEDIFF( CURRENT_DATE() , 'datum') > 0
  6. THEN datum ='later' END
  7. FROM kopers
  8. ") or die(mysql_error());


Maar dat werkte dus niet 
Offline Gerard - 23/11/2006 13:53
Avatar van Gerard Ouwe rakker
  1. $result22 = mysql_query("
  2. SELECT DATE_FORMAT('datum', '%d-%m-%Y'), CASE
  3. WHEN DATEDIFF( CURRENT_DATE() , 'datum') = 0
  4. THEN datum = 'nu'
  5. WHEN DATEDIFF( CURRENT_DATE() , 'datum') > 0
  6. THEN datum ='later' END
  7. FROM kopers
  8. ") or die(mysql_error());
Offline Chupskie - 23/11/2006 13:57
Avatar van Chupskie MySQL beginner Ja, proximus, dat is ongeveer hetzelfde (behalve AS datum, heb jij niet). Maar beide oplossingen werken niet.

Hij geeft niks weer, terwijl er voldoen rijen in zitten, die daaraan voldoen? Hij geeft ook geen error melding of niks?
Offline Gerard - 23/11/2006 13:58
Avatar van Gerard Ouwe rakker waarschijnlijk omdat datum wordt overschreven ofzo. Maarja, succes. De methodes zijn iig goed.
Offline Chupskie - 23/11/2006 16:47 (laatste wijziging 23/11/2006 20:41)
Avatar van Chupskie MySQL beginner Problem Solved. Met de volgende code is het gelukt:
  1. $query = "
  2. SELECT
  3. CASE
  4. WHEN DATEDIFF(CURRENT_DATE(), datum) = 0 THEN 'nu'
  5. WHEN DATEDIFF(CURRENT_DATE(), datum) > 0 THEN 'later'
  6. END AS wanneer
  7. FROM
  8. kopers
  9. ";
  10.  
  11. $result22 = mysql_query($query) or die(mysql_error());


He probleem, lag aan de quotes om datum (in de datediff), het is een kolom, dus daar moeten helemaal geen quotes om.
Verder gaf ik op het eind (bij AS) dezelfde naam, als de kolom heet.
Dit kan natuurlijk ook voor problemen zorgen.

Het probleem is opgelost, ik heb weer een heel hoop bij geleerd.
En bedankt voor jullie hulp 

edit: nog 1 klein vraagje?
Kan ik ook het aantal correcte rijen tellen, kheb al dit geprobeerd:
COUNT(wanneer) AS teldatums, geeft aan dat kolom niet bestaat,
COUNT(datum) AS teldatums, geeft ook alle rijen en niet allen 'NU' en
mysql_num_rows, maar dan telt ie alle rijen, en niet alleen die van 'NU'

Hoe kan ik dit nu tellen/count'en ????

edit2:
  1. $count = 0;
  2. while($row = mysql_fetch_assoc($result22))
  3. {
  4. if($row['wanneer'] == 'nu')
  5. {
  6. $count++;
  7. }
  8. }
  9. echo $count;


Toch bedankt  
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.255s