Thread Zeitspannen in Abfrage unterbringen: select von Datum bis Datum (2 answers)
Opened by pktm at 2005-09-24 19:03

pktm
 2005-09-24 19:03
#33597 #33597
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
Hallo!

Datenbank: MySQL 3.23.51-nt

Ich arbeite zur Zeit an einem kleinen Script namens "AktuellesProgramm" :-)
Dort kann der Benutzer Termine eintragen, die dann automatisch, abhängig vom Datum wann eine Websiete besucht wird, immer aktuell auf einer Webseite präsentiert werden.

Im Administrations-Teil dieses Dinges, wo ich gerade herum frickele soll der Benuter sich die Datenbankeinträge je nach Auswahl anzeigen lassen können. So z.B. alle Termine in den Jahren 2004 und 2005, die in der Zeitspanne Mai bis März, und Dezember statt finden.

Das habe ich bisher so geregelt (hoffe, es ist übersichtlich genug):
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
        # 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
~;


Die Auswahlmöglichkeit ist ganz einfach durch Checkboxen für alle in der DB vorhandenen Jahre und alle 12 Monate gegeben.

Das funktioniert soweit ganz gut.
ABER: Wenn der Benutzer einen Termin eingegeben hat, der sich über 2 Jahre erstreckt, z.B. ein Termin von Weihnachten bis Neujahr, so wird dieser nicht angezeigt.

Hat da jemand zufällig einen Tipp, wie ich das hinbekomme?
Irgendwelche mir bislang unbekannten Datums-Select-Funktionen? Event. Codeschnipsel?

Grüße, pktm
http://www.intergastro-service.de (mein erstes CMS :) )

View full thread Zeitspannen in Abfrage unterbringen: select von Datum bis Datum