Ziel der Übung: Nur Tatorte aus den in den letzten X Jahren aufnehmen.

Leider wird über DVB wohl weder ‘originairdate’ noch ‘airdate’ mitübertragen, so dass ein einfacher Powersearch mit:

program.title LIKE 'tatort:%' AND program.airdate >= YEAR(SUBDATE(CURDATE(), INTERVAL 5 YEAR))

nicht funktioniert…. Mal ganz abgesehen davon, dass ich egentlich gar nicht weiß ob jetzt die spalte ‘originalairdate’ oder doch eher die Spalte ‘airdate’ die richtige wäre…

Das gute ist nun, das wenigstens im ‘subtitle’ oder der ‘description’ (meistens) sowas wie ‘Fernsehfilm Deutschland 2007’ drinne steht.

Mit der nachfolgenden MySQL Funktion ‘YearsRegexp’ lassen sich diese Information dennoch nutzen. Die Funktion erzeugt einen Regulären Ausdruck welcher welcher auf eine bestimmte Anzahl von Jahren passt:

DROP  Function IF EXISTS YearsRegexp;
DELIMITER  //
CREATE Function YearsRegexp(years INTEGER)
Returns varchar(252)
NOT DETERMINISTIC /*every new year it will produce different results...*/
BEGIN
        DECLARE exp VARCHAR(252) DEFAULT '(';
        Set years = IF(years>50,50,years); /*so the result will fit into exp*/
        Set years = years - 1;
        WHILE years >= 0 DO
                set exp = CONCAT(exp, year(subdate(curdate(),interval years year)),IF(years>0,'|',''));
                Set years = years - 1;
        END WHILE;
        return CONCAT(exp,')');
END
//
delimiter ;

zum testen mal folgendes eingeben:

select YearsRegexp(5);

das sollte dann ungerfär sowas hier erzeugen:

+----------------------------+
| YearsRegexp(5)             |
+----------------------------+
| (2007|2008|2009|2010|2011) |
+----------------------------+
1 row in set (0.00 sec)

Alle Tatörter der letzten 5 Jahre lassen sich dann zum Beispiel so finden:

select chanid,starttime,title,subtitle from program where  program.title like 'tatort:%' and ( program.subtitle REGEXP CONCAT('.*',YearsRegexp(5)) OR program.description REGEXP CONCAT('.*',YearsRegexp(5)));

Im Powersearch kann jetzt die where clause aus dem letzten Statement verwendet werden:

program.title like 'tatort:%' and ( program.subtitle REGEXP CONCAT('.*',YearsRegexp(5)) OR program.description REGEXP CONCAT('.*',YearsRegexp(5)))

Und das Kleingedruckte: Leider wird die Funktion nicht in die von mythtv erstellten Datenbankbackups mit auf genommen und muss nach dem restore erst wieder von Hand in die mythconverg DB eingepflegt werden, damit der powersearch wieder funktioniert.