|
| Mysql query Fra : Johannes Skov Frands~ |
Dato : 12-09-05 11:05 |
|
Hey
Jeg er ved at skrive my et kalender script (classe) og jeg skal
selvfølgelig lagere mine data et eller endet sted og det bliver til at
startet med i en mysql database.
Internt i scriptet arbejder jeg med unixtimestamp til al datahåndteringen.
Alt der skal outputtes til skærmen håndteres med strftime()
Alt det smides i databasen gemmes i mysql's 'datetime' format.
Problem:
Når jeg henter ud fra databasen vil jeg gerne have fat i alle events fra
en speciel dag.
hvorledes fomulere du en forespørgsel der hentere poster mellem 2
datetime værdi'er?
Denne forespørgsel henter alle begivenheder ud der starter på
$_GET[time] tidspunktet , men jeg skal bruge en der henter alle evnets
ud der sker på den dag $_GET[time] forekommer.
her er min forepørgsel:
$sql = "SELECT id, UNIX_TIMESTAMP(start_time),UNIX_TIMESTAMP(end_time),
title, text FROM calender WHERE time=$_GET[time]";
Jeg har funderet lidt over om det er 'BETWEEN' jeg skal bruge, men jeg
kan kun finde eksempler med between hvor der er brugt heltal, ikke datoer.
Det kan også være der er en helt anden og meget bedre måde at løse
problemet på.....
Joe
| |
Troels Hansen (12-09-2005)
| Kommentar Fra : Troels Hansen |
Dato : 12-09-05 11:25 |
|
Johannes Skov Frandsen wrote:
> $sql = "SELECT id, UNIX_TIMESTAMP(start_time),UNIX_TIMESTAMP(end_time),
> title, text FROM calender WHERE time=$_GET[time]";
>
> Jeg har funderet lidt over om det er 'BETWEEN' jeg skal bruge, men jeg
> kan kun finde eksempler med between hvor der er brugt heltal, ikke datoer.
SELECT id, UNIX_TIMESTAMP(start_time),UNIX_TIMESTAMP(end_time),
title, text FROM calender WHERE time BETWEEN '$_GET[time1]' AND
'$_GET[time2]'
Bare husk at der skal time1 og time2 skal være i formatet ÅÅÅÅ-MM-DD
| |
Peter Brodersen (12-09-2005)
| Kommentar Fra : Peter Brodersen |
Dato : 12-09-05 11:35 |
|
On Mon, 12 Sep 2005 12:24:52 +0200, Troels Hansen <idle@invalid.email>
wrote:
>SELECT id, UNIX_TIMESTAMP(start_time),UNIX_TIMESTAMP(end_time),
>title, text FROM calender WHERE time BETWEEN '$_GET[time1]' AND
>'$_GET[time2]'
>
>Bare husk at der skal time1 og time2 skal være i formatet ÅÅÅÅ-MM-DD
Husk, at BETWEEN både medtager start- og slutværdien. Med andre ord er
det blot en anden måde at skrive:
WHERE time >= '$_GET[time1]' AND time <= '$_GET[time2]'
Det skal så præciseres her angående datofelter. Er der tale om
datetime-felter, så bliver "ÅÅÅÅ-MM-DD" udvidet til
"ÅÅÅÅ-MM-DD 00:00:00". Så for fx 2005-09-11 og 2005-09-12 vil den i
praksis finde poster mellem "2005-09-11 00:00:00" og
"2005-09-12 00:00:00". Man risikerer således at få enkelte poster med
fra næste dag, der lige præcis er tidssat til kl. 00:00:00
For at undgå den fejl (der måske sjældent opstår), kan vi fx udføre
følgende, hvor vi ganske enkelt retter <= til < og derfor ikke
medtager sluttidspunktet:
WHERE time >= '$_GET[time1]' AND time < '$_GET[time2]'
--
- Peter Brodersen
| |
Johannes Skov Frands~ (12-09-2005)
| Kommentar Fra : Johannes Skov Frands~ |
Dato : 12-09-05 12:46 |
|
Tak for inputtet til jer begge... det var lige det jeg skulle bruge for
at komme videre...
jeg har brugt denne løsning
$first = substr($_GET['time'],0,10).' 00:00:00';
$secound = substr($_GET['time'],0,10).' 23:59:59';
$sql = "SELECT id, UNIX_TIMESTAMP(start_time),UNIX_TIMESTAMP(end_time),
title, text FROM calender2 WHERE start_time BETWEEN '$first' and
'$secound'";
Vh
Joe
| |
|
|