Ik heb een (MySQL-)database met films...

Het is de bedoeling dat ik een query krijg met alleen films die ouder dan 2 jaar zijn.
zo ziet mijn tabel filmarchief eruit:

CREATE TABLE `filmarchief` (
`pkFilmID` bigint(21) unsigned NOT NULL auto_increment,
`Titel` varchar(255) NOT NULL default '',
`Genre` varchar(100) default NULL,
`Land` varchar(75) default NULL,
`Jaar` year(4) default NULL,
`Waardering` varchar(20) default NULL,
`Leeftijd` varchar(10) default NULL,
`MIN` int(5) unsigned default NULL,
`Acteurs` varchar(255) default NULL,
`Regisseur` varchar(75) default NULL,
`Verhaal` varchar(100) default NULL,
`Muziek` varchar(75) default NULL,
`zwart_wit` enum('yes','no','0','1') default 'no',
`stereo` enum('yes','no','0','1') default 'no',
`dolby` enum('yes','no','0','1') default 'no',
`breedbeeld` enum('yes','no','0','1') default 'no',
`TVF` enum('yes','no','0','1') default 'no',
`Uitgezonden` date default NULL,
`Tijd` time default NULL,
`Eindtijd` time default NULL,
`Zender` varchar(25) default NULL,
`NL_TV` date default NULL,
`Aantal` int(3) unsigned default NULL,
`filmkompas` enum('yes','no','0','1') default 'no',
`TCM` enum('yes','no','0','1') default 'no',
`gegevens_nodig` enum('yes','no','0','1') default 'no',
`AKA` longtext,
`opmerkingen` varchar(255) default NULL,
`foto` longblob,
`IMDb_link` varchar(255) default NULL,
`IMDb_cijfer` decimal(3,1) default NULL,
`IMDb_votes` int(11) unsigned default NULL,
`FT_link` varchar(255) default NULL,
`FT_cijfer` decimal(3,1) default NULL,
`FT_votes` int(11) unsigned default NULL,
`MM_link` varchar(255) default NULL,
`MM_cijfer` decimal(5,2) default NULL,
`MM_votes` int(11) unsigned default NULL,
`RT_link` varchar(255) default NULL,
`AMG_link` varchar(255) default NULL,
`FA_votes` bigint(21) unsigned default NULL,
`FA_totaal` bigint(21) unsigned default NULL,
`FA_cijfer` decimal(3,1) default NULL,
`trailer` varchar(255) default NULL,
`showview` int(11) unsigned default NULL,
`oudFT_link` varchar(255) default NULL,
`oudFT_cijfer` decimal(3,1) default NULL,
`oudFT_votes` int(11) unsigned default NULL,
`samenvatting` longtext,
`oneliner` longtext,
`mening` longtext,
`beoordeling` longtext,
`minpluspunten` longtext,
PRIMARY KEY (`pkFilmID`),
FULLTEXT KEY `titelindex`(`Titel`)
) TYPE=MyISAM COMMENT='FilmArchief';


Ik heb al de volgende query:
SELECT *
FROM filmarchief
WHERE (MM_cijfer IS NOT NULL And MM_votes>=200)
ORDER BY MM_cijfer DESC, FT_cijfer DESC, IMDb_cijfer DESC, waardering DESC, MM_votes DESC, FT_votes DESC, IMDb_votes DESC, jaar DESC
LIMIT 0,250;

maar het is dus de bedoeling dat er alleen films in komen die minimaal 2 jaar oud zijn...
Ik weet alleen (nog) niet welke functie ik het beste kan gebruiken, DATEDIFF, DATE_ADD ???

Wie kan mij helpen?
of is deze vraag al reeds eens eerder gesteld? (graag dan ff een linkje o.i.d.)
$year = date('Y');
$year = $year - 2

werkt dat niet??
Lol, met INTERVAL.

<?php
$sql = mysql_query("SELECT * FROM filmarchief WHERE jaar < NOW() - INTERVAL 2 YEAR");
?>

Dan gebruik je dus voor Jaar DATETIME.
roel,
Zou mijn voorbeeld ook niet werken???
want
`Jaar` year(4) default NULL,

is dus eigenlijk gewoon een getal,
Voer ik de volgende query uit op mijn db:

SELECT *
FROM filmarchief
WHERE jaar < NOW() - INTERVAL 2 YEAR
ORDER BY jaar DESC;

dan krijg ik nog films uit 2008 en 2009, er zouden nog films in voor mogen komen van 2007, maar dus niet van 2008 en 2009. (het is immers 2009)
btw. werkt INTERVAL trouwens met alle php-versies? (tot nu toe)

@Matthias
Op zich zou het misschien kunnen werken, maar ik moet gegevens uit de db halen en die vergelijken met liefst een (SQL-)query.

@Roel
wat bedoel je met
Roel schreef op 24.07.2009 21:46
Dan gebruik je dus voor Jaar DATETIME.
?
ik moet in plaats van year(4) in de statement
`Jaar` year(4) default NULL,
`Jaar` datetime
gebruiken?

Van dat laatste begrijp ik even niet veel, maar dit werkt gewoon op alle PHP versies, want dit is nl. MySQL werk :)
Als ik citeer uit de MovieMeter-site is het dan misschien duidelijker?

"De top 250: de films met de hoogste waardering op MovieMeter. Om voor deze lijst in aanmerking te komen moet een film minstens 200 stemmen ontvangen hebben. Films die in de afgelopen 2 jaar in de bioscoop zijn gaan draaien komen nog niet in aanmerking voor deze lijst."

is het nu duidelijk genoeg?
omgeveer zelfde systeem als imdb
Alleen MM heeft een makkelijker waardering-systeem dan IMDb, quote van de IMDb Top 250:

"The formula for calculating the Top Rated 250 Titles gives a true Bayesian estimate:

weighted rating (WR) = (v ÷ (v+m)) × R + (m ÷ (v+m)) × C

where:
R = average for the movie (mean) = (Rating)
v = number of votes for the movie = (votes)
m = minimum votes required to be listed in the Top 250 (currently 1300)
C = the mean vote across the whole report (currently 6.8)
"

Roel begreep iets niet, misschien nu wel...?

Reageren