grafische Darstellung von Terminen

lupographix

Grünschnabel
Hallo,

ich hänge fest.
In der Datenbank werden die Termine in Form von YYYY-MM-DD gepeichert.
Die Termine werden dann als Liste pro Monat ausgegeben.
Vergangene Termine per css grau dargestellt.
Soweit so gut.
Gleichzeitig habe ich aber 12 Buttons als Grafik, die die Monate darstellen.
Also Jan bis Dez. (Klickt man z.B. auf "Jun", dann kommen alle Termine vom Juni)
Und hier das Problem:
Jetzt sollen sowohl die Monate mit den vergangenen Terminen UND die Monate, die noch keine Termine haben mit einer anderen Grafik dargestellt werden, als die Monate, bei denen es Termine gibt.
Und da muss ich leider aufgeben. Irgendswie hab ich da einen Denkfehler.
Ich kann zwar die vergangenen Termine anders darstellen, als die zukünftigen, aber zukünftige Monate, die noch keinen Termin haben wie die vergangenen darzustellen, da happerts.
Vielleicht kann mir einer einen Denkanstoss geben.

Habe mal einen Screenshot angehängt, damit es evtl. klarer ersichtlich ist, was ich gerne realisieren möchte.

Danke schon mal im voraus!
 

Anhänge

  • termine.gif
    termine.gif
    27 KB · Aufrufe: 58
Du musst einfach für jeden Monat der noch vor dir liegt und in dem noch Termine sein könnten einen Query auf die Datenbank nach der Anzahl der Termine machen...

Wenn kein Termin im jeweiligen Monat ist dann gibts halt auch keine blaue Grafik ;)

Oder versteh ich das falsch?

lg
 
Danke KleinOr für die schnelle Antwort.
Nein, Du liegst nicht falsch ;)
Kannst Du mir einen Beispiel-Query zeigen?
Das mit der Anzahl hab ich noch nicht gecheckt....

Danke!
 
Hi,

das kann man auch über eine Abfrage lösen.

SQL:
SELECT MONTH(datum) FROM termine 
   WHERE YEAR(datum) = 2008 
   GROUP BY MONTH(datum)

liefert Dir alle Monate des Jahres 2008, für die es Einträge in der Tabelle Termine gibt.

LG
 
Zuletzt bearbeitet von einem Moderator:
Merci kuddeldaddeldu,

aber das Problem ist, dass ich ja sowohl die vergangenen Termine, die eingetragenen Termine und die folgenden, aber noch nicht existierenden Termine zusammen bringen möchte.
Ist meines Erachtens eine Abfrage mit verschachtelten Schleifen.
Aber, wie schon erwähnt: Das übersteigt meine Logik oder ich denke wieder mal viel zu kompliziert ;)

nochmals Danke!
 
Hi,

wieso verschachtelte Schleifen? Wenn Du vergangene Monate ausklammern willst, kannst Du die Abfrage ja noch eingrenzen:

SQL:
SELECT MONTH(datum) FROM termine
   WHERE YEAR(datum) = 2008 (oder YEAR(NOW()) )
   AND MONTH(datum) >= MONTH(NOW())
   GROUP BY MONTH(datum)

Das liefert Dir auf Dein Beispiel bezogen genau 2 Datensätze, nämlich Monat 7 und 8. Du wolltest doch nur wissen, welche Knöpfe blau (und anklickbar) sein müssen.

LG
 
Zuletzt bearbeitet von einem Moderator:
Hi kuddeldaddeldu,

ne, da haben wir uns missverstanden.
Ich will ja nicht nur die eingetragenen Termine darstellen, sondern auch die anderen.
Hab also 3 Fälle der Monatsanzeige:
  • vergangene Termine (die nicht gelöscht werden und grau dargestellt werden)
  • eingetragene Termine (die blau dargestellt werden)
  • und zukünftige Monate, die noch keinen Termin haben( auch grau dargestellt)

Um nun alle 12 Monate zu zeigen, muss ich das doch in einer Schleife durchlaufen lassen.
Oder bin ich jetzt voll auf dem falschen Dampfer?


LG
 
Hey,

kuddeldaddeldu hat dich schon richtig verstanden. Er liefert dir mit seinem Statement ja auch nur eine Liste mit allen Monaten die du Blau hinterlegen sollst. Dazu brauchst du eine schleife. Richtig ;)

Also du musst beides kombinieren...
Das Ergebnis des SELECTS einfach richtig auswerten.

Evt postest du mal die bisherige Button-darstellung. Da kann man dir sicher mit helfen!

lg
 
Also ich würde das so Lösen.
Wie immer unkonventionell und Kompliziert :)

PHP:
for($i = 1; $i < 13; $i++){
  $sql = "SELECT * FROM `termine`
          WHERE `jahr`  = '".mysql_real_escape_string(date(Y))."'
          AND   `monat` = '".mysql_real_escape_string($i)."'
         ";
  $result = mysql_query($sql);
  $num    = mysql_num_rows($result);
  $row    = mysql_fetch_array($result);
  if($num == 0){
    echo '<img src="IMG/g_mon_'.$i.'.jpg">';
  }elseif($row['monat'] < date(m)){
    echo '<img src="IMG/g_mon_'.$i.'.jpg">';
  }else{
    echo '<img src="IMG/b_mon_'.$i.'.jpg">';
  }
}

Code:
CREATE TABLE IF NOT EXISTS `termine` (
  `id` int(5) NOT NULL auto_increment,
  `jahr` int(4) NOT NULL,
  `monat` int(2) NOT NULL,
  `tag` int(2) NOT NULL,
  `content` varchar(200) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ;

--
-- Daten für Tabelle `termine`
--

INSERT INTO `termine` (`id`, `jahr`, `monat`, `tag`, `content`) VALUES
(1, 2008, 7, 24, 'test'),
(2, 2008, 8, 12, 'test1'),
(3, 2008, 11, 12, 'test2');
 

Anhänge

  • blue_grey.jpg
    blue_grey.jpg
    48,2 KB · Aufrufe: 17
Hi,

dann machst Du aber für jeden Monat eine Abfrage, obwohl doch eine einzige reicht. Das legt jetzt bei 12 Monaten nicht die Seite lahm, aber sowas sollte man sich gar nicht erst angewöhnen.

Klein0r hat's richtig erfasst. Man braucht nur die Monate, die blau dargestellt werden sollen:

PHP:
$result = mysql_query("SELECT MONTH(datum) as Monat FROM termine WHERE YEAR(datum) = YEAR(NOW()) AND MONTH(datum) >= MONTH(NOW()) GROUP BY MONTH(datum)", $connID);
$active_months = array();
while($record = mysql_fetch_assoc($result)) {
   $active_months[] = $record['Monat'];
}
for($i = 1; $i < 13; $i++) {
   if(in_array($i, $active_months)) {
      echo '<img src="img/blau_'.$i.'.jpg">';
   } else {
      echo '<img src="img/grau_'.$i.'.jpg">';
   }  
}

LG
 

Neue Beiträge

Zurück