SQL Abfrage

Hallo,
ich habe Problem bei einer SQL Abfrage.

Die Datenbank sie folgend aus:
Code:
CREATE TABLE page_specials (
  id int(13) NOT NULL auto_increment,
  date_year varchar(10) NOT NULL default '',
  date_month varchar(10) NOT NULL default '',
  date_day varchar(10) NOT NULL default '',
  expiry_year varchar(10) NOT NULL default '',
  expiry_month varchar(10) NOT NULL default '',
  expiry_day varchar(10) NOT NULL default '',
  PRIMARY KEY  (id)
) TYPE=MyISAM;

Ich möchte die Datensätze abfragen, bei denen das expiry Datum >= dem heutigen ist!
Code:
SELECT * FROM page_specials  WHERE DATE_FORMAT( NOW(),'%d') <= `expiry_day` AND DATE_FORMAT( NOW(),'%m') <= `expiry_month` AND DATE_FORMAT( NOW(),'%Y') <= `expiry_year;


Leider geht es noch nicht.
Der tag und monat dürfen nicht kleiner seien, als das aktuelle datum.

Hast du eine Idee?

SF
 
Code:
SELECT * FROM page_specials  WHERE DATE_FORMAT( NOW(),'%Y') < `expiry_year` OR ( DATE_FORMAT( NOW(),'%Y') = `expiry_year` AND DATE_FORMAT( NOW(),'%m') < `expiry_month` OR ( DATE_FORMAT( NOW(),'%m') = `expiry_month` AND DATE_FORMAT( NOW(),'%d') <= `expiry_day` ) )
wobei es ja eigentlich extra typen für Zeit/Datum gibt...
 
Mit sovielen OR-Verknüpfungen kommt der Server ja ins Schwitzen 8) Das folgende dürfte etwas perfomanter sein:

Code:
SELECT *
FROM  `page_specials` where unix_timestamp(concat(concat( expiry_year,  '-', expiry_month ),'-',expiry_day)) >= unix_timestamp()

Das absolute Optimum wäre allerdings, wenn du jedes Datum als unix-Zeitstempel in einem INT-Feld speicherst. Genauer gehts nicht mehr, und der Server freut sich :)
 
tip: mysql stellt dir sogar eigene datentypen fuer das abspeichern von einem datum zur verfuegung.....benutze diese doch auch!!!!
 
So, habe das Problem bewältigt!

SELECT * FROM page_specials where expiry_date between DATE_FORMAT( NOW(),'%Y-%m-%d') and 'expiry_date';

Danke SF
 
Zurück
Oben