Begränsa SELECT efter datum?

Tråden skapades och har fått 5 svar. Det senaste inlägget skrevs .
1

Jag vill välja ut rader från en tabell med följande kolumner: day, month, year. Vad som hämtas beror på dagens datum (sortera bort sådant som hänt före "idag").

Har kommit fram till denna kod som nästan fungerar:

$dagensdatum = getdate();
$day = $dagensdatum[ mday];
$month = $dagensdatum[ mon];
$year = $dagensdatum[ year];

"SELECT year, month, day, id, title FROM calendar_events 
WHERE day >= $day AND month >= $month AND year >= $year 
ORDER BY event_month ASC, event_day ASC";

Problemet är att om dagens datum är den 25:e så sorteras också händelser i nästa månad bort om de ligger före den 25:e.

Går det att lösa så att bara händelser före "idag" men i nästa månad inte sorteras bort? Det är mySQL 3

  • Oregistrerad
  • 2005-09-25 19:49

Använd datumfält!

/Y

  • Medlem
  • Göteborg
  • 2005-09-25 20:31

Jag är så helt rudis på programmering att jag inte ens kan säga vad det är för språk du skriver i här ovan Men enda gången jag knåpat med liknande (och då var jag tvungen att hålla mig till ASP-urk -med instruktionsboken i ena handen) gjorde jag så här:

Använde en funktion som tar fram "nu" (hette kanske "NOW" i asp?) och begärde alla rader där fältet datum var >= nu. Så enkelt. Eller som jag ville ha det, på framsidan bara kommande vecka [NOW =< DATE < (NOW + 8 dygn) ], på kalendersidan alla poster men rensa bort de som är äldre än en vecka [DATE > (NOW - 8="8" dygn)].

Ja syntax här är ju helt tokig men tänket funkar väl. Med andra ord menar jag nog samma som inlägget ovan; använd datumfält!

Ursprungligen av Yozzi:

Använd datumfält!

/Y

Ja, jag vet. Jag skäms, men det är av sådana här misstag man lär sig. Så går det när man vill vara effektiv(?) och utgår från en Open Source kalender

Skall lägga till ett datumfält i tabellen med förhoppning om att inte behöva göra om från grunden.

//Magnus

  • Medlem
  • Mölndal
  • 2005-09-25 21:34
Ursprungligen av Brake6:

Problemet är att om dagens datum är den 25:e så sorteras också händelser i nästa månad bort om de ligger före den 25:e.(

Ja, så där kan man ju inte göra...

Finns någon speciell anledning till att du lagrar år, månad och datum i separata fält?

En väg att gå är att skapa en datumliknande sträng av dina fält och sedan jämföra denna sträng med dagens datum (som måste ha samma format). Typ

WHERE (year + '/' + month + '/' + day >= $dagensdatum)
  • Oregistrerad
  • 2005-09-25 21:41

Fattar inte varför jag skriver det här, för det är dumt och fel. Men för att svara på din fråga - det kan ju vara så att du inte kan ändra. Men om du kan - kör DATE!

Plocka ut alla poster för innevarande månad.
Plocka ut alla poster för resten av året.
Plocka ut alla poster för framtida år.
Samla posterna.

mysql> create table a (d int, m int, y int);
Query OK, 0 rows affected (0.00 sec)

mysql> insert into a values (14, 1, 2001);
Query OK, 1 row affected (0.01 sec)

mysql> insert into a values (12, 2, 2001);
Query OK, 1 row affected (0.00 sec)

mysql> insert into a values (16, 2, 2001);
Query OK, 1 row affected (0.00 sec)

mysql> insert into a values (1, 1, 2002);
Query OK, 1 row affected (0.00 sec)

mysql> insert into a values (1, 1, 2001);
Query OK, 1 row affected (0.00 sec)

mysql> select * from a where d >= 14 and m = 1 and y = 2001
-> union
-> select * from a where m > 1 and y = 2001
-> union
-> select * from a where y > 2001;
+------+------+------+
| d | m | y |
+------+------+------+
| 14 | 1 | 2001 |
| 12 | 2 | 2001 |
| 16 | 2 | 2001 |
| 1 | 1 | 2002 |
+------+------+------+
4 rows in set (0.00 sec)

/Y

1
Bevaka tråden