wie muss ich die SQL Abfrage abändern?
Twilo
- datenbank
0 André Laugks0 Twilo
Hallo,
ich habe folgende Tabelle
+-----+--------------+----------------------+---------------+---------------+
| _id | _gerichtText | _gerichtUeberschrift | _gerichtPreis | _gerichtDatum |
+-----+--------------+----------------------+---------------+---------------+
| 1 | Gericht 1 | test | 10.00 | 2005-04-20 |
+-----+--------------+----------------------+---------------+---------------+
ich verwende die PEAR Klasse DB
meine SQL Anweisung sieht wie folgt aus
$db->getAssoc('SELECT DATE_FORMAT(_gerichtDatum,"%u") AS _ereignisWeek, _gerichtDatum, _gerichtPreis, _gerichtUeberschrift, _gerichtText FROM modul_gerichte WHERE _gerichtDatum > NOW() ORDER BY _gerichtDatum ASC', false, array(), DB_FETCHMODE_OBJECT, true);
dann bekomme ich z.B. so ein Array zurück
Array
(
[15] => Array
(
[0] => stdClass Object
(
[_ereignisWeek] => 15
[_gerichtDatum] => 2005-04-17
[_gerichtPreis] => 0.00
[_gerichtUeberschrift] => dfdf
[_gerichtText] => dfdf
)
)
[16] => Array
(
[0] => stdClass Object
(
[_ereignisWeek] => 16
[_gerichtDatum] => 2005-04-20
[_gerichtPreis] => 10.00
[_gerichtUeberschrift] => kfdsk
[_gerichtText] => Gericht 3
)
)
[17] => Array
(
[0] => stdClass Object
(
[_ereignisWeek] => 17
[_gerichtDatum] => 2005-04-30
[_gerichtPreis] => 50.00
[_gerichtUeberschrift] => bla bla
[_gerichtText] => Gericht 1
)
[1] => stdClass Object
(
[_ereignisWeek] => 17
[_gerichtDatum] => 2005-04-30
[_gerichtPreis] => 20.00
[_gerichtUeberschrift] => Hdfj djf
[_gerichtText] => Gericht 2
)
[2] => stdClass Object
(
[_ereignisWeek] => 17
[_gerichtDatum] => 2005-04-30
[_gerichtPreis] => 10.00
[_gerichtUeberschrift] => as
[_gerichtText] => Gericht 4
)
)
)
das ist zwar soweit ganz gut, nur müsste er mir das ganze noch nach den WochenTag in der Woche unterteilen
Beispiel
[17] => Array
(
[1] => Array
(
[0] => stdClass Object
(
[_ereignisWeek] => ...
[_gerichtDatum] => ...
[_gerichtPreis] => ...
[_gerichtUeberschrift] => ...
[_gerichtText] => ...
)
...
[2] => Array
(
[0] => stdClass Object
(
[_ereignisWeek] => ...
[_gerichtDatum] => ...
[_gerichtPreis] => ...
[_gerichtUeberschrift] => ...
[_gerichtText] => ...
)
...
...
[0] => Array
(
[0] => stdClass Object
(
[_ereignisWeek] => ...
[_gerichtDatum] => ...
[_gerichtPreis] => ...
[_gerichtUeberschrift] => ...
[_gerichtText] => ...
)
)
)
oder statt 1, 2, 3, 4, 5, 6, 0 Montag, etc. hinschreiben
den Wochentag könnte man ja anhand von _gerichtDatum berechnen lassen
wie bekomme ich das gelöst?
oder muss ich das Problem anders angehen?
dann hab ich noch eine Frage, wie muss ich die WHERE Bedingung erweitern, damit er nur max 2 Wochen abruft
wenn ich heute das Script aufrufen würde, dürfte er mir nur die Gerichte bis zum 24.04.2005 abrufen
würde ich das Script am Montag aufrufen, müsste er die Gerichte bis 01.05.2005 abrufen
also immer bis zum Wochenende
mfg
Twilo
Hallo!
oder statt 1, 2, 3, 4, 5, 6, 0 Montag, etc. hinschreiben
den Wochentag könnte man ja anhand von _gerichtDatum berechnen lassen
Woher hast Du DATE_FORMAT()? In der MySQL-Doku steht in der Nähe auch eine Funktionen mit der Du anhand des Datums den Wochentag bekommst.
Für DATE_FORMAT() gibt es sogar ein Parameter, der Dir den Wochentag ausgibt. IMHO aber nur in Englich. Ich kann jetzt nicht genau sagen, ob man das auch in Deutsch umwandeln kann.
Ansonsten arbeite mit einem Array, in dem die Wochentage stehen.
function wochentag($id) {
$tag = array(
"0" => "Sonntag",
"1" => "Montag",
"2" => "Dienstag",
"3" => "Mittwoch",
"4" => "Donnerstag",
"5" => "Samstag",
"6" => "Sonntag",
);
return $tag[$id];
}
dann hab ich noch eine Frage, wie muss ich die WHERE Bedingung erweitern, damit er nur max 2 Wochen abruft
wenn ich heute das Script aufrufen würde, dürfte er mir nur die Gerichte bis zum 24.04.2005 abrufen
würde ich das Script am Montag aufrufen, müsste er die Gerichte bis 01.05.2005 abrufen
In der Nähe von DATE_FORMAT() steht auch ADD_DATE(). Mit ADD_DATE() kannst Du solche Abfragen erstellen.
André Laugks
Hallo,
oder statt 1, 2, 3, 4, 5, 6, 0 Montag, etc. hinschreiben
den Wochentag könnte man ja anhand von _gerichtDatum berechnen lassen
Woher hast Du DATE_FORMAT()? In der MySQL-Doku steht in der Nähe auch eine Funktionen mit der Du anhand des Datums den Wochentag bekommst.
Für DATE_FORMAT() gibt es sogar ein Parameter, der Dir den Wochentag ausgibt. IMHO aber nur in Englich. Ich kann jetzt nicht genau sagen, ob man das auch in Deutsch umwandeln kann.
Ansonsten arbeite mit einem Array, in dem die Wochentage stehen.function wochentag($id) {
$tag = array(
"0" => "Sonntag",
"1" => "Montag",
"2" => "Dienstag",
"3" => "Mittwoch",
"4" => "Donnerstag",
"5" => "Samstag",
"6" => "Sonntag",
);
return $tag[$id];
}
das ist nicht so schwer, nur wie bekomme ich das Array so hin?
das andere ist ja dann nur ne Kleinigkeit ;-)
ich könnte mir das ja per PHP so hinbasteln, nur ich denke, dass wenn es gleich so als Ausgabe bekomme, es etwas besser ist :-)
dann hab ich noch eine Frage, wie muss ich die WHERE Bedingung erweitern, damit er nur max 2 Wochen abruft
wenn ich heute das Script aufrufen würde, dürfte er mir nur die Gerichte bis zum 24.04.2005 abrufen
würde ich das Script am Montag aufrufen, müsste er die Gerichte bis 01.05.2005 abrufenIn der Nähe von DATE_FORMAT() steht auch ADD_DATE(). Mit ADD_DATE() kannst Du solche Abfragen erstellen.
ich hab mir das angeschaut
aber ich verstehe nicht so ganz, wie ich das in der WHERE Bedingung unterbringen muss
mfg
Twilo
Hallo!
function wochentag($id) {
$tag = array(
"0" => "Sonntag",
"1" => "Montag",
"2" => "Dienstag",
"3" => "Mittwoch",
"4" => "Donnerstag",
"5" => "Samstag",
"6" => "Sonntag",
);
return $tag[$id];
}das ist nicht so schwer, nur wie bekomme ich das Array so hin?
das andere ist ja dann nur ne Kleinigkeit ;-)
Das Array habe ich Dir ja schon hingeschrieben, auch wenn es etwas falsch ist.
function wochentag($id) {
$tag = array(
"1" => "Sonntag",
"2" => "Montag",
"3" => "Dienstag",
"4" => "Mittwoch",
"5" => "Donnerstag",
"6" => "Samstag",
"7" => "Sonntag",
);
return $tag[$id];
}
ich könnte mir das ja per PHP so hinbasteln, nur ich denke, dass wenn es gleich so als Ausgabe bekomme, es etwas besser ist :-)
Dein SQL-Statement sieht ja so aus:
SELECT DATE_FORMAT(_gerichtDatum,"%u") AS _ereignisWeek, _gerichtDatum, _gerichtPreis, _gerichtUeberschrift, _gerichtText FROM modul_gerichte WHERE _gerichtDatum > NOW() ORDER BY _gerichtDatum ASC;
Das erweiterst Du folgendermaßen:
SELECT DAYOFWEEK(_gerichtDatum) AS _dayofmonth, DATE_FORMAT(_gerichtDatum,"%u") ...
DAYOFWEEK(date)
Returns the weekday index for date (1 = Sunday, 2 = Monday, ..., 7 = Saturday). These index values correspond to the ODBC standard.
In dem Array was Du zurück bekommst steht nun auch das Arrayelement [_dayofmonth]. Wenn Du nun das Array abarbeitest, schickst Du den Wert durch die Funktion wochentag();
z.B:
echo wochentag([_dayofmonth);
In der Nähe von DATE_FORMAT() steht auch ADD_DATE(). Mit ADD_DATE() kannst Du solche Abfragen erstellen.
ich hab mir das angeschaut
aber ich verstehe nicht so ganz, wie ich das in der WHERE Bedingung unterbringen muss
Nehmen wir mal das heutige Datum an. Es sollen alle Datensätze angezeigt werden, bei denen das Datum sich innerhalb der nächsten 14 Tage befindet.
CURRENT_DATE, CURRENT_DATE oder CURDATE() = aktuelles Datum
SELECT datum FROM tabelle WHERE datum>=CURRENT_DATE AND datum<=DATE_ADD(datum, INTERVAL 14 DAY);
André Laugks