Bedingte Abfrage

Hiho @ all,
ich hätte mal eine etw. komplizierte PHP abfrage die ich nicht so wirklich hinbekommen.
Also ich möchte dass er zuerst einmal die Datenbank Sendeplan auswählt. (Soweit komm ich mit) Nun möchte ich das er den DJ + den Showtitel des aktuellen Zeit sowie des Datums abruft also z.B. es ist jetzt 19:28 am 23.05.2010 und in der Datenbank steht jetzt
1[ID] | DJ Live[DJ] | Test Show[Show] | 18-20[Time] | 23.05.2010[Date]
So und wie mache ich dass das er jetzt zuerst in der DB nach dem aktuellen Datum schaut, prüft ob das stimmt (Soweit komm ich mir einer IF aber so ganz funzt das auch net). Dann nach dem Zeitraum, dann prüft ob dieser die die aktuelle Uhrzeit umfasst(da hab ich schon ein Problem, hab nämlich keine Ahnung wie ich das definiere in einer If), und zu guter letzt wenn sowohl als auch korrekt ist den dazugehörigen DJ sowie den Showtitel ausgibt.
Ich weis in der hinsicht einfach nicht mehr weiter.
Ich bedanke mich als schonmal im Vorraus.
MfG
Jackon

Hi
Das wird kompliziert da du eigentlich nichts zu berechnen in der DB hast und somit in PHP dafür sorgen mußt das du da erstmal was zum vergleichen hin bekommst.

1[ID] | DJ Live[DJ] | Test Show[Show] | 18-20[Time] |
23.05.2010[Date]

ist nicht zu gebrauchen für das was du machen willst. Es ist zwar möglich benötigt aber sehr viel rechnerei.
Besser wäre es wenn du es so machen würdest

id | dj | show | timestampvon | timestampbis
1 DJ Live | Test | mktime() | mktime()

Dann kannst du die abfrage machen wie du es willst und zwar z.b. mit BETWEEN (von bis)

Gruß Lamer

Hallo Jackon,

was für eine Datenbank verwendest Du denn? Bei machen kann man dies durch entsprechende Formulierung der Abfrage (sprich SQL) erreichen.

MfG Georg V.

Danke erstmal für die schnellen Antworten

also ich verwende MySQL.
Ich sehe nur ein Problem darin das ich so jeden Tag die DB nullen muss so dass keine doppelten Einträge die sich mit der Zeit kreuzen entstehen.

darum ja ein Timestamp da in einem Timestamp die Sekunden seit 01.01.1970 gerechnet werden und ich nicht glaube das das programm über 2038 hinaus geht … wird auch nichts doppelt abgespeichert werden. Da für jeden Sekunde zwischen 01.01.1970 und ich glaub irgendwas im Februar 2038 … eine eigene Zahl existiert.

Gruß Lamer

ah ok ne bis dorthin hab ich glaube ich die Software überholt nur wie werte ich das dann aus in PHP per If oder wie.
Können Sie vielleicht ein kleines Beispiel schreiben das dann z.B. echo „Es geht“ augibt oder sowas damit ich das besser versteh. Oder vielleicht Link der sowas schicken.
MfG
Jackon

hi

Ich denk mal das du die Datenbankverbindung schon hinbekommen hast und die Datenbank so geändert hast wie ich es dir geschrieben habe.

Dann würde das so Funktionieren:

$iTimestampVon = mktime( 18, 0, 0, 5, 23, 2010 );
$iTimestampBis = mktime( 20, 0, 0, 5, 23, 2010 );
// gibt die Datensätze zurück die in der Zeitspanne von 18 bis 20 Uhr am 23.05.2010 liegen in diesem Fall nur einer
$sQuery = 'SELECT \* FROM table WHERE timestampvon\>=' . $iTimestampVon . ' AND timestamp0 ){
 while( $aRows = mysql\_fetch\_assoc( $hResult ) ){
 echo 'Von ' . date( 'd.m.Y H:i', $aRows['timestampvon'] ) . ' bis ' . date( 'd.m.Y H:i', $aRows['timestampbis'] ) . ' legt ' . $aRows['dj'] . ' in seiner Show ' . $aRows['show'] . 'auf
' . "\n";
 }
}

Gruß Lamer

Ja ok danke ersteinmal für deine Schnelle Antwort ich schau mir das später mal genauer an den ersten Teil bis ende der SQL abfrage komm ich mit aber den rest muss ich noch etw. ausklabustern … XD
Wenn du so nun die Abfrage machst machst das jetzt nur von 18-20 uhr am 23.5.2010 müsste doch aber auch das Datum per Date definier bar sein oder ?!? weil sonst müsste ich ja für jeden tag Den code ändern.
Dann noch was anderes, das ist ja jetztr die Abfrage aber die Eingabe müsste doch vom Prinzip her so ähnlich gehn halt per Formular und die Zeitspannen per arrays definieren und dort dann auch per Date das Datum einfügen… oder nicht !!!

Hi
klar die anfrage kannst du ja machen wie du willst. Irgendwoher muß das Programm ja wissen was du willst. Mit der Möglichkeit die ich dir gezeigt habe kannst du den Tag oder die Woche abfrage und einen Terminkalender z.B. befüllen.

Und klar die eingabe in die Datenbank mußt du natürlich auch mit Timestamps machen.
INSERT INTO Table SET dj=‚Bla‘, show=‚blub‘, timestampvon=mktime(h,m,s,m,d,y), timestampbis=mktime(h,m,s,m,d,y)

gruß Lamer

Hiho @ all,

Moin moin!

ich hätte mal eine etw. komplizierte PHP abfrage die ich nicht
so wirklich hinbekommen.

So kompliziert wird es schon nicht sein, auch wenn die bisherigen Antworten dies durchaus doch nahe legen.

Also ich möchte dass er zuerst einmal die Datenbank Sendeplan
auswählt. (Soweit komm ich mit) Nun möchte ich das er den DJ +
den Showtitel des aktuellen Zeit sowie des Datums abruft also
z.B. es ist jetzt 19:28 am 23.05.2010 und in der Datenbank
steht jetzt
1[ID] | DJ Live[DJ] | Test Show[Show] | 18-20[Time] |
23.05.2010[Date]

Das sieht doch schonmal gut aus, allerdings frage ich mich, warum 2 Felder für Datum und Uhrzeit genommen wurde - aber das ist kein Problem.

So und wie mache ich dass das er jetzt zuerst in der DB nach
dem aktuellen Datum schaut, prüft ob das stimmt (Soweit komm
ich mir einer IF aber so ganz funzt das auch net).

Wozu solltest du in der Datenbank das Datum prüfen? Da in den meisten Fällen der Datenbank-Server auf dem gleichen Rechner wie der Webserver läuft, ist die Uhrzeit bei beiden Servern normalerweise gleich!?

Dann nach
dem Zeitraum, dann prüft ob dieser die die aktuelle Uhrzeit
umfasst(da hab ich schon ein Problem, hab nämlich keine Ahnung
wie ich das definiere in einer If),

Hier stelle ich mal eine Frage: Woher weißt du, welchen Zeitraum die Show umfasst? In der Datenbank steht schließlich nur ein (!) Datum und eine (!) Uhrzeit. Für einen Zeitraum braucht man dann entweder noch eine Angabe über die Dauer oder ein direktes Ende mit Datum und Uhrzeit. Oder ist immer fest vorgegeben, dass eine Show z.B. 2 Stunden dauert?

und zu guter letzt wenn
sowohl als auch korrekt ist den dazugehörigen DJ sowie den
Showtitel ausgibt.

Wenn die obige Frage beantwortet ist, kann ich dir eventuell einen einzigen Query zeigen, mit dem du die Daten ausgelesen bekommst, ohne in PHP eine Berechnung durchführen zu müssen (MySQL ist verdammt mächtig).

Ich weis in der hinsicht einfach nicht mehr weiter.
Ich bedanke mich als schonmal im Vorraus.
MfG
Jackon

Ich warte auf eine Antwort :smile:

Ok das ist ja schonmal auch hilfreich. Danke ersteinmal für dein Interresse. Nun ja das mit dem Datum abfragen ist eigentlich leicht zu erklären denn er soll ja testen ob das Datum für die Show heute ist. Nun das 1. Feld mit der Uhrzeit lässt sich daraus schließen das ich vorhatte das er feststellen soll ob das in die aktuelle Uhrzeit umfasst. Nun ja da werde ich aber wahrscheinlich die Varainte von Lamer nehmen (an dieser Stelle danke noch für dein schnelles Antworten) wobei ich da noch schauen muss das er immer automatisch das Datum beim INSERT nimmt.
Nun das mit dem Wann weis ich welchen Zeitraum die Show umfasst wahr vielleicht etw. komisch von mir dargestellt da es mit sicherheit leichter ist wenn ich einmal eine Spalte für Von und eine für Bis hab das lässt sich denke ich leichter Abfragen. Fest vorgegeben das die Show immer im 2h Takt verläuft ist es nicht. Das habe ich auch nicht vor da ich leider einstimmig überstimmt wurde als ich es einbauen wollte. Nun hab ich auch gestern noch mein altes PHP Buch rausgekramt. Ich konnte mich noch dunkel daran erinnern dass da mal ein Bsp. mit Mittagspause war. Reintheoretisch ist das ja so ähnlich. Ich werd da mal nachschauen. Sollte ich dann eine Variante gewählt haben und den Code dazu entworfen so dass er auch funtkioniert. So lass ich es euch wissen und poste ihn hier eben.
MfG
Jackon

Guten Tag,

Gut, so ganz verstanden habe ich dein Vorhaben immernoch nicht, aber du scheinst da auch etwas „unter der Pantoffel“ zu stehen!? Sprich: Du triffst nicht unbedingt die Entscheidung, wie das zu implementieren ist.

Aber mal ein kleiner Vorschlag, wie es recht einfach gehen könnte:

Tabelle:

ID | DJ | Show | Anfang | Ende

ID ist hierbei ein numerischer Schlüssel der Show (z.B. INT(5) UNSIGNED als Primary-Key), DJ und Show sind (VAR)CHAR-Felder und Anfang, sowie Ende sind TIMESTAMPs bzw. DATETIME-Felder. Das Datum würde ich deshalb in beide Felde integrieren, da bei Shows über den Tageswechsel hinaus (am Monatsende wäre es sogar ein Monatswechsel, am Jahresende ein Jahreswechsel, etc.) dann eine feste Endzeit definiert ist und es dann das korrekte Datum enthält, sonst wäre es schwer zu entscheiden, wenn der Tag vorbei ist, welche Show aktuell noch läuft.

Zum Eintragen kannst du dann einfach z.B. einen Unix-Timestamp nutzen oder durch die diversen Datum-/Uhrzeitfunktionen von MySQL die wildesten Berechnungen einpflegen. Das schöne ist, dass du die gleichen Methoden dann auch für das End-Datum einbauen kannst. Entweder berechnest du hier direkt den End-Zeitpunkt oder du nutzt den Start-Zeitpunkt inklusive der Dauer und fügst den z.B. mit ADDTIME() dem Anfangs-Wert hinzu, die Kombinationsmöglichkeiten sind hier schier unendlich.

Ein Beispiel für das Hinzufügen:

// Start-Zeit erstellen
$iTimestampStart = mktime ($iHour,
$iMinute,
$iSecond,
$iMonth,
$iDay,
$iYear
);

// Die Dauer in Sekunden (müsste vorher ggf. berechnet werden)
$iTimestampStop = $iTimestampStart + $iLength;

// Query
$sql = „INSERT INTO tabelle (DJ,Show,Anfang,Ende) VALUES (‚DJ‘,‚Show‘,FROM_UNIXTIME(’“.$iTimestampStart."’),FROM_UNIXTIME(’".$iTimestampStop."’))"

Alternative:

// Query
$sql = „INSERT INTO tabelle (DJ,Show,Anfang,Ende) VALUES (‚DJ‘,‚Show‘,FROM_UNIXTIME(’“.$iTimestampStart."’),ADDTIME(FROM_UNIXTIME(’".$iTimestampStart."’),‚03:45:00‘))"

Bei der Alternative kann eine Zeitspanne in Text-Form eingegeben werden, MySQL setzt das dann automatisch um. Eventuell ist das einfacher, muss man schauen. Eine zweite Alternative wäre es, wie im ersten Beispiel die Stop-Zeit auch über mktime() zu berechnen. Viele Wege führen nach Rom und das hier waren noch lange nicht alle :wink:

Zur Abfrage wäre es dann relativ einfach, wenn du dich immer auf das jetzige Datum und die aktuelle Uhrzeit beziehen willst:

$sql = „SELECT ID,DJ,Show,Anfang,Ende FROM tabelle WHERE NOW() BETWEEN Anfang AND Ende ORDER BY Anfang ASC“

Damit brauchst du nichts berechnen, sondern nutzt einfach Funktionen in MySQL zum Auslesen der aktuellen Show. Wichtig hierbei ist lediglich, dass Anfang