Avatar billede canedo Nybegynder
28. februar 2003 - 12:29 Der er 19 kommentarer og
2 løsninger

Select dato + 30 dage

Hej
Jeg skal have lavet en query, som piller alle de poster ud, som findes angivet med dato imellem dags dato og 30 dage frem. Jeg har i min database et felt af typen "date" så der ligger daoerne i formatet yyyy-mm-dd.

Hvad gør jeg?

Her er mit script, indtil videre:

<?php
$conn = mysql_connect("localhost", "roof");
mysql_select_db("boeger");

$datotil = "2003-03-04"; #Her skal dator være dags dato + 30 dage
$datofra = "2002-02-28"; #skal være dags dato

$result = mysql_query("SELECT * FROM titel WHERE Dato => $datofra AND Dato =< $datotil");
print mysql_error();

while ($row = mysql_fetch_array($result)) {
$navn = $row["Navn"];

if ($navn == '') { echo "Ingen bøger skal afleveres indenfor de næste 30 dage"; }

else {
echo "$navn";
}
}
?>
Avatar billede canedo Nybegynder
28. februar 2003 - 12:31 #1
NB: Er det muligt at lave formatet af datoen om i MySql, så det ikke er yyyy-mm-dd men kun mm-dd?
Avatar billede ahv Nybegynder
28. februar 2003 - 12:34 #2
Hvis ellers resten af din kode er iorden, så gør d det på denne måde:

<?php
$conn = mysql_connect("localhost", "roof");
mysql_select_db("boeger");

$dage = time() + (60*60*24*30);
$datetil = date("Y-m-d", $dager);
$datofra = date("Y-m-d");

$result = mysql_query("SELECT * FROM titel WHERE Dato >= $datofra AND Dato <= $datotil");
print mysql_error();

while ($row = mysql_fetch_array($result)) {
$navn = $row["Navn"];

if ($navn == '') { echo "Ingen bøger skal afleveres indenfor de næste 30 dage"; }

else {
echo "$navn";
}
}
?>


Til dit NB spm. så må du lave feltet om fra date til et varchar hvor du så har det i.
Avatar billede ahv Nybegynder
28. februar 2003 - 12:34 #3
Som jeg dog hele tiden laver små fejl ;)

$dage = time() + (60*60*24*30);
$datotil = date("Y-m-d", $dage);
$datofra = date("Y-m-d");
Avatar billede erikjacobsen Ekspert
28. februar 2003 - 12:35 #4
$result = mysql_query("SELECT * FROM titel WHERE Dato => '$datofra' AND Dato =< date_add('$datofra',interval 30 day)");
Avatar billede erikjacobsen Ekspert
28. februar 2003 - 12:35 #5
ups:
$result = mysql_query("SELECT * FROM titel WHERE Dato => '$datofra' AND Dato <= date_add('$datofra',interval 30 day)");
Avatar billede erikjacobsen Ekspert
28. februar 2003 - 12:37 #6
Du skal altid opbevare datoer som du gør. Hvis du ikke vil vise det på
den måde, det opbevares på, så lav det om ved udskrift.
Avatar billede techek Praktikant
28. februar 2003 - 12:41 #7
Du kunne evt. nøjes med at lave det hele i SQL. Jeg kan ikke huske syntaksen på MySQL'en fuldstændigt, men du skulle kunne skrive noget i retningen af :

"SELECT bookdate, title, DATE_FORMAT(bookdate, '%m-%Y') as bookdate_formatted FROM books WHERE bookdate > " . $date . " AND bookdate < ADDDATE(" . $date . ", INTERVAL 30 DAYS)"

Prøv det - eller se om du kan få bare nogle gode ideer herfra.
Avatar billede canedo Nybegynder
28. februar 2003 - 12:41 #8
Jeg har lige testet dette:

$dage = time() + (60*60*24*30);
$datotil = date("Y-m-d", $dage);
$datofra = date("Y-m-d");

$result = mysql_query("SELECT * FROM personer WHERE Dato => '$datofra' AND Dato =< '$datotil'");
print mysql_error();

men der er åbentbart en fejl et sted, jeg får denne fejl:
You have an error in your SQL syntax near '=> '2003-02-28' AND Dato =< '2003-03-30'' at line 1
Avatar billede erikjacobsen Ekspert
28. februar 2003 - 12:42 #9
Jamen, altså:
$result = mysql_query("SELECT * FROM titel WHERE Dato >= '$datofra' AND Dato <= date_add('$datofra',interval 30 day)");
Avatar billede techek Praktikant
28. februar 2003 - 12:43 #10
Nå, men jeg vil videre med mine XAL og Axapta-opgaver. *s*
Avatar billede ahv Nybegynder
28. februar 2003 - 12:44 #11
Dine ligmemd tegn skal være på højre side af større eller mindre end.
Avatar billede canedo Nybegynder
28. februar 2003 - 12:48 #12
Kan man lave det sådan at der KUN bliver taget udgangspunkt i dag og måned? Det er et system med årlige begivenheder, så hvis der f.eks. er oprettet noget i 2003 så skal der også listes poster i 2004 indenfor samme måned.
Avatar billede canedo Nybegynder
28. februar 2003 - 12:50 #13
Jeg kan ikke få det til at virke. I databasen har jeg en post oprettet med datoen 2003-03-01, men den listes ikke. Jeg får ingen syntax fejl.
Avatar billede ahv Nybegynder
28. februar 2003 - 12:58 #14
<?php
$conn = mysql_connect("localhost", "roof");
mysql_select_db("boeger");

$dage = time() + (60*60*24*30);
$datotil = date("Y-m-d", $dage);
$datofra = date("Y-m-d");

$result = mysql_query("SELECT * FROM titel WHERE Dato >= '$datofra' AND Dato <= '$datotil'");
print mysql_error();

while ($row = mysql_fetch_array($result)) {
$navn = $row["Navn"];

if ($navn == '') { echo "Ingen bøger skal afleveres indenfor de næste 30 dage"; }

else {
echo "$navn";
}
}
?>
Avatar billede erikjacobsen Ekspert
28. februar 2003 - 13:02 #15
Måske
$navn = $row["navn"];
Avatar billede canedo Nybegynder
28. februar 2003 - 13:05 #16
Ahv >yes, nu vises posten med datoen 2003-03-01 (hvor lå fejlen?)
Hvis jeg nu har en post fra 1967-03-01, hvordan kan jeg så få den vist også?
Avatar billede canedo Nybegynder
28. februar 2003 - 13:06 #17
jeg kunne nøjes med echo "$navn";
Avatar billede ahv Nybegynder
28. februar 2003 - 13:07 #18
Fejlen lå i at du ikke havde ' rundt om $datofra og $datotil
Avatar billede erikjacobsen Ekspert
28. februar 2003 - 13:08 #19
Hvis du kun skal arbejde med måned og dag, skal du lave dit helt eget
system. 30 dage frem i tiden går vel også hen over nytår. Fødselsdage?
Der er ikke meget af det du har fået her du kan bruge.
Avatar billede canedo Nybegynder
28. februar 2003 - 13:14 #20
Så må jeg foreløbig nøjes med at se bort fra År :-) Er ikke lige haj nok til at bygge mit eget system.... Tak for hjælpen gutter.
Avatar billede canedo Nybegynder
28. februar 2003 - 13:18 #21
svar
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

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