/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
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
   

Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408927
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste