SELFPHP: Version 5.8.2 Befehlsreferenz - Tutorial – Kochbuch – Forum für PHP Einsteiger und professionelle Entwickler

SELFPHP


Professional CronJob-Service

Suche



CronJob-Service    
bei SELFPHP mit ...



 + minütlichen Aufrufen
 + eigenem Crontab Eintrag
 + unbegrenzten CronJobs
 + Statistiken
 + Beispielaufrufen
 + Control-Bereich

Führen Sie mit den CronJobs von SELFPHP zeitgesteuert Programme auf Ihrem Server aus. Weitere Infos



:: Buchempfehlung ::

Webseiten professionell erstellen

Webseiten professionell erstellen zur Buchempfehlung
 

:: Anbieterverzeichnis ::

Globale Branchen

Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP  

 

:: Newsletter ::

Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!

Vorname: 
Name:
E-Mail:
 
 

Zurück   PHP Forum > SELFPHP > PHP für Fortgeschrittene und Experten
Hilfe Community Kalender Heutige Beiträge Suchen

PHP für Fortgeschrittene und Experten Fortgeschrittene und Experten können hier über ihre Probleme und Bedenken talken

Antwort
 
Themen-Optionen Ansicht
  #1  
Alt 20.02.2003, 14:19:03
Moses Moses ist offline
Anfänger
 
Registriert seit: Jul 2002
Beiträge: 55
nochmals Kalenderproblem - MySql

Hallo,
arbeite mit MySql und Php (welch Überraschung...),
lasse mir über php einen Jahresübersichtskalender als Tabelle erstellen

for ($monat=1;$monat<=12;$monat++)
{
for ($tag=1;$tag<=31;$tag++)

{überprüfe dann für jedes Datum ob es das wirklich gibt (also kein 31. Februar)

if (checkdate($monat,$tag,$jahr))
{

und dann ob es ein Wochenende ist (wird anders-farbig ausgegeben)
$m=mktime(12,0,0,$monat,$tag,$jahr);
$datum=getdate($m);
if($datum[weekday]==Saturday || $datum[weekday]==Sunday)
{

soweit so gut.
Jetzt möchte ich für jeden Tag erfragen ob ein Termin in meiner Datenbank eingetragen ist - komm aber mit meiner MySql Query bzw. Php-Funktion nicht zurecht (stehe da irgendwie ziemlich auf dem Schlauch).
Natürlich funktioniert es, wenn ich jeden Tag einzeln Abfrage aber das sind 365 Abfragen und das möchte ich natürlich vermeiden (dauert ziemlich lang...).
Wie muß das aussehen, wenn ich alle Termine abfrage die ich für das jeweilige Jahr habe und dann die Termine vergleiche mit den tatsächlichen Tagen.
Bei der Ausgabe müssen aber auch die Tage angezeigt werden, die keinen Termin haben.

Da gibt's bestimmt eine einfache Lösung aber ich peil es einfach nicht 8-(

Dankbar für jede Hilfe,
Moses
Mit Zitat antworten
  #2  
Alt 20.02.2003, 14:57:06
Greg G Greg G ist offline
Anfänger
 
Registriert seit: Feb 2003
Ort: Hessen
Beiträge: 116
Ich schreib dir mal meine Idee dazu, konket umsetzen musst du es dann selbst.

Du fragst die Daten aus deiner Tabelle ab.
select Datumsfeld from Tabelle;

Das Ergebnis nudelst du Datensatz für Datensatz durch und fügst die Daten in ein array ein:

$result = mysql_query("select Datumsfeld from Tabelle");
while($row = mysql_fetch_row($result)){
datumsarray[]=$row[0];
}

Wenn du dann deine Schleife hast, kannst du die Bedingung
if (in_array($jahr."-".$monat."-".$tag, $datumsarray))

verwenden.
Du musst noch mal genau auf die Formatierung der mySQL Daten schauen, die habe ich jetzt nicht sicher im Kopf.
Wenn du viele doppelt belegte Termine hast, dann könntest du die Abfrage mit "select distinct ..." machen.

GG
Mit Zitat antworten
  #3  
Alt 20.02.2003, 17:00:25
Moses Moses ist offline
Anfänger
 
Registriert seit: Jul 2002
Beiträge: 55
Hallo,
erstmal danke für den Tip, hat mich schon etwas weiter gebracht.
Habe jezt ein bisschen rum experimentiert und stehe anscheinend heute wirklich auf der Leitung (ok, es gibt Menschen die würden jetzt sagen "heute?" aber das ist ein anderes Thema).

Bei der Abfrage frage ich ja nicht nur ein Feld ab, sondern mehrere, also ID, Datum, Stadt, Status
Es gibt Doppelbelegungen beim Datum, und das sollte dann in der Ausgabe berücksichtigt werden "n Termine"
Der Status muß explizit auf berücksichtigt werden (wird durch anders farbige Schrift dargestellt) gibt Anfrage, Option, Bestätigt, Reisetag
Achtung jetzt kommt es ganz blöd (habe den Eindruck es ist 3 in der Früh und der Bierkasten schon wieder leer - falls Du verstehst was ich meine)
result = mysql_query("select ID, Date, City, Status from Tabelle WHERE C_ID=$C_ID && Year=$Year Order by Date");
//-- $C_ID und $Year werden von Formular übergeben

while($row = mysql_fetch_row($result))
{
$datumsarray[]=$row[0];
}
Also ich durchlaufe also die einzelnen Tage und habe für jeden Tag die Abfrage
if (in_array($jahr."-".$monat."-".$tag, $datumsarray))

jetzt kommt die Abfrage wie oft ist das Datum im Array
wenn mehrmals schreibe Anzahl Termine
ansonsten
die Abfrage nach dem Status
falls A schreibe <Farbe>Stadt</Farbe>
falls O schreibe<andere Farbe>Stadt<etc.

Ist ja eigentlich ganz einfach, aber ich bekomme die Informationen einfach nicht aus dem Array raus um die Abfragen zu formulieren!!!????
Mein Brett vorm Kopf muß wohl schon gigantische Ausmaße haben! Klar mit fetch_array keine Probleme aber mit fetch_row leider schon.

Bitte - auch wenn diese Frage schon saudämlich ist - um Hilfe,
Moses
Mit Zitat antworten
  #4  
Alt 20.02.2003, 20:51:26
Greg G Greg G ist offline
Anfänger
 
Registriert seit: Feb 2003
Ort: Hessen
Beiträge: 116
Hallo Moses

Ich glaub so groß ist dein Brett vor dem Kopf nicht.
Die Sache ist, so wie du sie haben willst tatsächlich nicht so leicht.

Je nachdem, wie deine Daten verteilt sind würde ich folgendes vorschlagen:

Wenn die Daten sich auf wenige Tage häufen (z.B. nur an Wochenenden), dann würde ich das array tatsächlich nur dazu nutzen, um zu sehen, ob ein Datum mit einem Termin belegt ist, und dann in deiner Kalender-Schleife die Termine für das entsprechende Datum noch einmal aus der Datenbank abfragen.
Du kannst auch schon bei der Abfrage mitzählen, wieviele Termine an dem Tag liegen:

select count(1) as Anzahl, Date from Tabelle where C_ID=$C_ID && Year=$Year group by Date order by Date

(Ich glaub das order by wirst du nicht brauchen, wenn du group by schon hast.)
Hier würde sich dann empfehlen, dass array mit den Daten zu indizieren.

while($row = mysql_fetch_row($result)){
$datumsarray["$row[1]"]=$row[0];
}
oder so ähnlich. So dass dir dann $datumsarray["2003-02-20"] die Anzahl der Veranstaltungen am heutigen Tag angibt.


Du könntest auch alles mit DEINER Abfrage in das array reinhauen
Wenn die Abfrage schon order by date macht, dann könntest du (ähnlich wie der Merge-Vorgang bei Merge-Sort, falls dir das was sagt) in deiner Schleife jeweils zum nächsten Tag gehen und solange aus deinem array die Daten rauswalken, wie der Tag übereinstimmt. (Den nächsten Tag, aus dem array, der nicht mit dem augenblicklichen übereinstimmt speicherst du in einer Variablen zwischen und gehst dann solange in deiner Schleife weiter, bis der getroffen wird.)

Du musst aufpassen mit den führenden Nullen, denn PHP übernimmt das Datum von mySQL ja als String, der dann exakt übereinstimmen muss.

GG
Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind aus.
[IMG] Code ist aus.
HTML-Code ist aus.

Gehe zu


Alle Zeitangaben in WEZ +2. Es ist jetzt 23:46:06 Uhr.


Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.


© 2001-2024 E-Mail SELFPHP OHG, info@selfphp.deImpressumKontakt