Twilo: wie muss ich die SQL Abfrage abändern?

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

  1. 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

    --
    Die Frau geht, die Hilti bleibt!
    1. 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 abrufen

      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

      mfg
      Twilo

      1. 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

        --
        Die Frau geht, die Hilti bleibt!