Nächsten drei Sendungen aus dem Sendeplan

h4dhunTer

Erfahrenes Mitglied
Hallo,
ich habe einen Sendeplan und möchte nun auf der Startseite die nächsten drei Sendungen anzeigen.
Ich habe diese Zeilen:
id, name, beschreibung, tag, uhrzeit
Tag: Montag, Dienstag, Mittwoch ,...
Uhrzeit: 15:00,18:00,...
Wie bekomme ich nun die nächsten drei Sendungen ausgegeben
 
Puh... Du solltest lieber einen Timestamp oder ein Date als Sendezeit speichern, das erleichtert das um einiges.

So wie deine DB jetzt aufgebaut ist funktioniert das auch überhaupt nicht, denn wenn du sagen würdest ich will die nächsten drei Sendungen von heute und heute ist Sonntag, dann gibt es in der DB zich Sontage, ergo Timestamp oder Date.
 
Hallo,
das geht, ich habe es geschafft eine Sendung auszugeben, doch leider gibts nur Probleme, wenn ich 3 Sendungen ausgeben möchte.

So gebe ich eine Sendung aus:
PHP:
<?php
$tag = strftime('%A');
$timestamp = time();
$uhrzeit = date("H:i",$timestamp);

if($tag=="Monday"){
    $tag="Montag";
    $tag2="Dienstag";
}elseif($tag=="Tuesday"){
    $tag="Dienstag";
    $tag2="Mittwoch";
}elseif($tag=="Wednesday"){
    $tag="Mittwoch";
    $tag2="Donnerstag";
}elseif($tag=="Thursday"){
    $tag="Donnerstag";
    $tag2="Freitag";
}elseif($tag=="Friday"){
    $tag="Freitag";
    $tag2="Samstag";
}elseif($tag=="Saturday"){
    $tag="Samstag";
    $tag2="Sonntag";
}elseif($tag=="Sunday"){
    $tag="Sonntag";
    $tag2="Montag";
}else{
    echo "error";
}

$sql3 = mysql_query("SELECT * FROM `sendeplan` WHERE `tag` = '".$tag."' AND anzeigen='1' AND `start` > '".$uhrzeit."' ORDER BY start LIMIT 1");
$anzahl2 = mysql_num_rows($sql3);
if($anzahl2=="1"){
$sql = "SELECT * FROM `sendeplan` WHERE `tag` = '".$tag."' AND anzeigen='1' AND `start` > '".$uhrzeit."' ORDER BY start LIMIT 1";
$abfrage = mysql_query($sql) OR die("Konnte Datenbank nicht benutzen.<br>Fehlermeldung: ".mysql_error());
while($daten = mysql_fetch_assoc($abfrage)){
# AUSGABE
}
}else{
$sql = "SELECT * FROM `sendeplan` WHERE `tag` = '".$tag2."' AND anzeigen='1' AND `start` > '1' ORDER BY start LIMIT 1";
$abfrage = mysql_query($sql) OR die("Konnte Datenbank nicht benutzen.<br>Fehlermeldung: ".mysql_error());
while($daten = mysql_fetch_assoc($abfrage)){
# AUSGABE
}
}
?>

Ich denke es geht und ich denke es gehört doch in PHP.
 
Wenn ich meinem DB-Prof so einen DB-Entwurf vorgelegt hätte, wäre ich damals von ihm persönlich von der FH geschmissen worden. Der bisherige Plan taugt nur, um regelmäßige/wöchentliche Sendungen abzubilden. Wie hier schon gesagt wurde, würde ich die DB-Tabelle folgendermaßen aufbauen (Kurzfassung):
SQL:
CREATE TABLE sendungen (
  id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
  name VARCHAR(30) NOT NULL,
  beschreibung TEXT NULL,
  beginn DATETIME NOT NULL,
  ende DATETIME NOT NULL
)
Ich würde die Entity 'ende' hinzufügen, um laufende Sendungen zu finden.
 
Zuletzt bearbeitet:
Naja, ich habe auch nie gesagt, dass der Code sehr schön ist.
Doch er macht das, was ich haben wollte.

Außerdem werden die Sendungen fest eingetragen, dass ist nur einmal. Damit meine ich: Montag, 04.03 und dann nie wieder.
 
Zuletzt bearbeitet:
Hi,

Doch er macht das, was ich haben wollte.

Was tust Du dann hier? *SCNR* :D

Mit Datum oder Zeitstempel kommt man bei einem Wochenplan nicht weiter. Aber Du kannst MySQL vorgeben, nach welchen Feldwerten sortiert werden soll. Das sähe in etwa so aus:

PHP:
$query = "SELECT * FROM `sendeplan` 
           WHERE (`tag` = '".$tag."' AND `start` > '".$uhrzeit."' 
              OR `tag` = '" . $tag2 . "') 
              AND `anzeigen` = 1 
           ORDER BY FIELD(`tag`, '" . $tag . "', '" . $tag2 . "') ASC, 
              `start` ASC
           LIMIT 0, 3";

Ob das mit dem Vergleichen/der Sortierung der Uhrzeit so ohne weiteres klappt, musst Du halt sehen, hab' gerade nicht so viel Zeit...

LG
 
Zurück