# wenn nichts angegeben wurde werden die Standard-Werte bemüht my @monate = @{$defaults{SqlSelectMonate}}; my $jahre = join",",@{$defaults{SqlSelectJahre}}; # Wenn die Anzeigekriterien geändert wurden, also andere Monate oder # Jahre übergeben wurden, sollten diese benutzt werden @monate = @{$self->param('SqlSelectMonate')} if defined $self->param('SqlSelectMonate'); $jahre = join ",",@{$self->param('SqlSelectJahre')} if defined $self->param('SqlSelectJahre'); # für jeden ausgewählten Monat: # * Gibt es Einträge deren AnzeigeZeitraumVon || AnzeigeZeitraumBis # mit diesem Monat zusammen fallen? (=) # * Gibt es Einträge, deren Anzeigeintervall sich über diesen Monat # erstreckt? (AZV <= Monat && Monat >= AZB) my $mk = undef; # mk = monatsklausel foreach my $m ( @monate ) { if( defined $mk ) { # das OR für jedes Element anhängen, aber nicht für das Erste. $mk .= qq~ OR ~; # mit \w sieht es schöner aus :) } $mk .= qq~ ( MONTH( AnzeigeZeitraumVon ) <= $m AND MONTH( AnzeigeZeitraumBis ) >= $m ) ~; } my $sql = qq~ SELECT ID, AnnounceCaption, DATE_FORMAT(AnzeigeZeitraumVon,'%d%.%m%.%Y') AS AnzeigeZeitraumVon, DATE_FORMAT(AnzeigeZeitraumBis,'%d%.%m%.%Y') AS AnzeigeZeitraumBis FROM `ap` WHERE YEAR(AnzeigeZeitraumBis) IN($jahre) AND ( $mk ) ORDER BY AnzeigeZeitraumVon DESC LIMIT $offset, $max ~;