webForumDet fria alternativet

Hämta rader där datumet är 10 dagar framåt och 10 dagar bakåt i tiden?

PHP

4 svar · 424 visningar · startad av axed

Medlem sedan nov. 200136 inlägg
Frågan#1

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?

Medlem sedan juni 20034 013 inlägg
#2

Jag brukar använda php för det:

mysql_query("SELECT * FROM tabellen WHERE datum BETWEEN '" . strtotime("-10 days") . "' AND '" . strtotime("+10 days") . "'");

Medlem sedan nov. 200136 inlägg
#3

Använder inte strtotime() sig av aktuellt datum på servern? Om jag vill starta med ett annat datum, hur gör jag då?

Medlem sedan feb. 2007278 inlägg
#4

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?

Medlem sedan nov. 200136 inlägg
#5

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.

259 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
129 ms — deklarationer (db)
0 ms — hämta statistik (cache)
125 ms — hämta tråd, inlägg och bilagor (db)
130 ms — ändringar (db)