Avatar billede donslund Nybegynder
28. april 2005 - 10:45 Der er 5 kommentarer og
1 løsning

Er nu mellem 2 tidspunkter?

Hej har en række poster der indeholder bl.a. 2 felter start og end.
De er af type datetime (YYYY-MM-DD TT:MM:SS)

Men når jeg vil teste om nu er mellem de 2 tidspunkter, så er det som om at den er ligeglad med end.

Min sql-sætning:
$hent_limit = "select * from ".$news_tbl." WHERE start < '".date("Y-m-d H:i:s")."' AND end > '".date("Y-m-d H:i:s")."' AND monitors LIKE '%;".$monitor.";%' OR monitors LIKE '".$monitor.";%' OR monitors LIKE '%;".$monitor."' OR monitors LIKE '".$monitor."' limit ".$alimit.",1";
Avatar billede barklund Nybegynder
28. april 2005 - 10:51 #1
Brug dog NOW() i stedet for - den gør det samme men er en indbygget mysql funktion og er derfor nok lidt mere optimal. Og så vender dine ulighederne den gale vej. Between er dog sjovere:

"select * from ".$news_tbl." WHERE (NOW() BETWEEN start AND end) AND monitors LIKE '%;".$monitor.";%' OR monitors LIKE '".$monitor.";%' OR monitors LIKE '%;".$monitor."' OR monitors LIKE '".$monitor."' limit ".$alimit.",1";
Avatar billede donslund Nybegynder
28. april 2005 - 11:05 #2
Jeg har en post med end = 2005-04-27 13:00:00 men den vises alligevel. Det burde den da ikke.
Avatar billede barklund Nybegynder
28. april 2005 - 11:11 #3
Hvis jeg skriver:

SELECT NOW() BETWEEN '2005-04-26 13:00:00' AND '2005-04-27 13:00:00'

Får jeg korrekt 0 - og skriver jeg:

SELECT NOW() BETWEEN '2005-04-26 13:00:00' AND '2005-04-29 13:00:00'

Får jeg korrekt 1.

Så umiddelbart er metoden god nok.

Hvorfor du har problemer skyldes nok præcedens af operatorerne. Prøv med lidt parenteser:

"select * from ".$news_tbl." WHERE (NOW() BETWEEN start AND end) AND (monitors LIKE '%;".$monitor.";%' OR monitors LIKE '".$monitor.";%' OR monitors LIKE '%;".$monitor."' OR monitors LIKE '".$monitor."') limit ".$alimit.",1";

Da dit udtryk betød:

"select * from ".$news_tbl." WHERE ((NOW() BETWEEN start AND end) AND monitors LIKE '%;".$monitor.";%') OR monitors LIKE '".$monitor.";%' OR monitors LIKE '%;".$monitor."' OR monitors LIKE '".$monitor."' limit ".$alimit.",1";

Læg mærke til, at kun første monitor-begrænsning er afhængig af tidspunktet - det er de andre ikke.

Med de rette parenteser skulle det hjælpe :)

--
Morten Barklund
Avatar billede donslund Nybegynder
28. april 2005 - 11:16 #4
Jeps. Så ser det ud til at virke efter hensigten. Tak for hjælpen.
Avatar billede barklund Nybegynder
28. april 2005 - 11:34 #5
Finfin
Avatar billede barklund Nybegynder
28. april 2005 - 12:36 #6
Tark for points :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester