Jag brukar använda php för det:
mysql_query("SELECT * FROM tabellen WHERE datum BETWEEN '" . strtotime("-10 days") . "' AND '" . strtotime("+10 days") . "'");
4 svar · 424 visningar · startad av axed
Har en tabell där en av kolumnerna är av typen date. Vill nu hämta alla rader där datumet diffar tio dagar både framåt och bakåt i tiden från aktuellt datum. Hur kan jag göra detta med sql-kod?
Jag brukar använda php för det:
mysql_query("SELECT * FROM tabellen WHERE datum BETWEEN '" . strtotime("-10 days") . "' AND '" . strtotime("+10 days") . "'");
Använder inte strtotime() sig av aktuellt datum på servern? Om jag vill starta med ett annat datum, hur gör jag då?
tydal har en lösning som endast fungerar omhttp://www.w3schools.com/php/func_date_default_timezone_set.asp man lagrar sina datum som unix-timestamp, dvs, ett heltalsfält i MySQL.
Det finns ledande webbutvecklare som rekommenderar detta, t.ex. Harry Fuecks. Själv gör jag det inte eftersom man inte kan se datum mänskligt läsbart när man tittar på dumpar i sin databas eller när man använder phpMyAdmin.
Lösning via SQL har sin elegens, men den är mindre bra om man tänker på prestanda. Förutsatt att du har ett index på dina datumfält, så kan en lösning där start- och slutdatum räknbas ut i PHP ge klart bättre prestanda. (Använder du MySQL <= 4.1 är det en mindre vetenskap i sig att skapa vettiga index, då en fråga aldrig använnder mer än ett enda...)
Om det är OK att frågan inte nyttjar index, så kan en ren SQL-lösning vara elegentast.
Den MySQL funktion du vill titta på heter INTERVAL: http://dev.mysql.com/doc/refman/5.0/en/date-and-time-functions.html
Vad menar du för övrigt med "aktuellt datum". Serverns datum styr du enkelt med lokaliseringskommandon: date_default_timezone_set i PHP 5.1 och framåt.
Är "aktuellt datum" angivet på något sätt?
Det jag vill göra är att vid varje hämtning av en nyhet med ett visst datum i databasen så vill jag även hämta "relaterade" nyheter, t ex alla nyheter som i samma kategori och som diffar 10 dagar i tiden. Jag kommer alltså visa hela nyheten med "aktuellt" datum och sedan under den vill jag ha länkar till andra relaterade nyheter. Det låter som om interval-funktionen skulle vara en bra lösning. Ska titta vidare på den.