Ik heb een tabel met tarieven. In deze tabel kan men een tarief per periode opslaan. Dus bijvoorbeeld begin_periode 11-12-2008 en eind_periode 31-12-2008. Het tarief in deze periode is bijvoorbeeld 150 euro. Dan wil ik dus met een query een result krijgen met het tarief van 150 euro indien je een datum gebruikt die binnen deze periode valt.
Daaraan wil ik nog toevoegen dat ik de periodes opsla als VARCHAR ipv als DATE omdt ik het vervelend vind dat dateformat standaard verkeerd staat. Indien het niet kan zonder DATE dan zal ik het toch moeten opslaan als date, maar liever niet.
Goed, ik heb al een code:
<?php
$q= mysql_query("
SELECT
tarief_id,
tarief,
DATE_FORMAT(begin_periode,'%d-%m-%Y'),
DATE_FORMAT(eind_periode,'%d-%m-%Y')
FROM
vliegtickets AS v
WHERE
tarief_id = '". mysql_real_escape_string($_GET['vakantieplaats'])."'
AND
'".mysql_real_escape_string($_GET['datumvanvertrek'])."'
BETWEEN
begin_periode
AND
eind_periode
");
?>
Alleen ik krijg geen result. Dit terwijl de datumvanvertrek die ik test wel in een periode valt.
Jezus, beetje vriendelijk mag hoor. Bovendien probeer ik ook nog een hoop uit voordat ik iets ga vragen. Bovendien had ik zelf al bedacht het om te zetten, echter krijg ik ook daarmee geen resultaat.
Gebruik gewoon DATE, aangezien varchar vergelijkingen anders gaan dan jij wilt. Als jij denkt dat de DATE verkeerd wordt weergeven wordt op je site dan converteer je die naar een formaat die jij wel wilt. En dit doe je in PHP zelf, niet naar de database toe aangezien je er wilt mee vergelijken.
varchar vergelijkingen gaan van links naar rechts en simpel weg controleert of deze waarden dezelfde zijn, hoger of lager. Terwijl vergelijken met DATE's kijkt naar jaar-maand-dag in die volgorde en dan kijken of iets hetzelfde is, hoger of lager.
Verder opzich kan ik het wel vinden met pgFrank's post, ik kan best begrijpen dat jij misschien een beginner bent en dergelijke maar in feite moet je wel wat verdiepen in de materie voordat je begint met het schrijven van zulke dingen. Ik heb genoeg mensen gezien namelijk in het bedrijfsleven die er eigenlijk ook niks van snappen maar wat aankloten om het wat bot neer te zetten, en in principe heb je niks aan zulke mensen. Constant uitleggen waarom ze het fout doen en ze verbeteren, het kost teveel tijd zeg maar.
<?php
$sql ="
SELECT
tarief_id,
tarief,
DATE_FORMAT(begin_periode,'%d-%m-%Y'),
DATE_FORMAT(eind_periode,'%d-%m-%Y')
FROM
vliegtickets AS v
WHERE
tarief_id = '". mysql_real_escape_string($_GET['vakantieplaats'])."'
AND
'".mysql_real_escape_string($_GET['datumvanvertrek'])."'
BETWEEN
begin_periode
AND
eind_periode";
echo $sql;
$result = mysql_query($sql);
?>
Tip: Geef beide periodes die je met DATE_FORMAT opmaakt, een alias. Dat maakt het verwerken in PHP eenvoudiger.
DATE_FORMAT(begin_periode,'%d-%m-%Y') AS nl_begin_periode,
DATE_FORMAT(eind_periode,'%d-%m-%Y') AS nl_eind_periode
En let erop dat een alias altijd een andere naam heeft als het origineel, anders ga je weer andere problemen krijgen. De alias heeft namelijk een andere inhoud dan het origineel.