mysql if Wochentage Vergleich mit Ausgabe

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • mysql if Wochentage Vergleich mit Ausgabe

    Hallo community,

    ich habe eine Tabelle in mysql angelegt, welche Events beinhaltet.
    Die Events haben ein Anfangsdatum und Enddatum (Zeitspanne).
    Nun finden einige Events innerhalb der Zeitspanne jedoch nur z.B.
    am Montag und am Mittwoch satt. Um dies in den Datensatz zu
    speichern, habe ich Felder (tinyint) von Mo - So angelgt, welche
    beim stattfinden eine 1 und sonst eine 0 bekommen.

    Nun meine Frage: wie kann ich eine mysql-Abfrage gestalten, die
    wenn ich ein Zeitintervall von z.B. 20.10 (Freitag) - 23.10 (Sonntag)
    wähle mir alle Events ausgibt, welche eine 1 am Fr oder Sa oder So
    haben?
    Zuletzt geändert von smartdragon; 24.10.2005, 20:01.
    Ein Sechser im Lotto und entdecke die Möglichkeiten.

  • #2
    wenn ich dich richtig verstanden habe, hast du 7 zusätzliche spalten in deiner tabelle für die wochentage?

    du hast je eine spalte für den start- und den endzeitpunt als TIMESTAMP (mysql) oder DATETIME?

    so?
    Code:
    SELECT
        e_start,
        e_ende,
        e_name    
    FROM
       e_tabelle
    WHERE
       (
          e_start BETWEEN '2005-10-20' AND '2005-10-23' OR
          e_ende BETWEEN '2005-10-20' AND '2005-10-23'
       ) AND
       e_weekday_fr = 1 AND
       e_weekday_sa = 1 AND
       e_weekday_so = 1
    habs nur mal so hingeklatscht... ohne garantie ...
    INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


    Kommentar


    • #3
      Genau, ich habe 7 spalten für die Tage und für das Anfangs-/ Enddatum das date Format.
      Die Abfrage ist im Moment so:

      PHP-Code:
      SELECT FROM events WHERE ('$date1' <= date2) AND
      (
      '$date2' >= date1ORDER BY date1 
      Nun liegt jedoch der Knackpunkt darin, das $date1 und $date2
      vom User über ein select Feld eingegeben werden. Würde ich
      Abfragen:

      PHP-Code:
      AND weekday_fr AND weekday_sa 1... 
      würde er ja unabhängig ob die ausgewählte Zeitspanne ein
      Freitag oder Samstag enthält die Events anzeigen, welche am
      Fr || Sa eine 1 gesetzt haben.

      Also müsste ich folglich alle enthaltenen Wochentage innerhalb
      der Zeitspanne ($date1 $date2) abfragen und irgendwie mit
      if (in der mysql-Anweisung) abfragen ob die auf 1 gesetzten Tage
      der Events in der Zeitspanne enthalten sind. So ungefähr:


      PHP-Code:
      (auslesen aller Wochentage in der Zeitspanne) AND WHERE
      (Mo || Di || Mi .... ) innerhalb der Zeitspanne 
      vielleicht kann man dies auch anders lösen...
      Zuletzt geändert von smartdragon; 24.10.2005, 20:03.
      Ein Sechser im Lotto und entdecke die Möglichkeiten.

      Kommentar


      • #4
        du hast meine sql-query oben gesehen?
        INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


        Kommentar


        • #5
          Ja, die habe ich gelesen und ich muss zugeben damit wäre meine Anfrage teilweise gelöst.
          Ich habe zwar geschrieben z.B. Fr - So
          (was die clause: (AND fr =1 AND sa = 1 AND So =1) erfüllen würde. Aber das war ein "z.B."

          Ich habe jedoch auch Events gegeben welche z.B.

          in der Zeitspanne vom 21.11.05 (das ist Montag) - 18.01.06 (ein Mittwoch)
          und nur jeden Mo und Mi stattfinden kann.

          ein anderes Event kann z.B. vom 25.11.05 (Freitag) - 02.12.05
          (auch Freitag) nur jeden Di, Mi und Fr gehen.

          Demnach müsste ich für jede Kombination der Wochentage ein
          OR einbauen und das wäre ziemlich lastig.
          Zuletzt geändert von smartdragon; 24.10.2005, 20:04.
          Ein Sechser im Lotto und entdecke die Möglichkeiten.

          Kommentar


          • #6
            Evtl. kann mein Problem hierunter:

            http://clients.smartdragon.de/test/veranstaltungen.php

            veranschaulicht werden.
            Zuletzt geändert von smartdragon; 24.10.2005, 19:57.
            Ein Sechser im Lotto und entdecke die Möglichkeiten.

            Kommentar


            • #7
              dort kann ich z.b. keine wochentage als user auswahlen/ankreuzen.

              also ist die ganze wochentagsabfragerei (noch) nicht von nutzen.

              aber so ganz genau habe ich das mit deinen wochentagen noch immer nicht verstanden.
              INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


              Kommentar


              • #8
                erstmal danke und respekt, das du dich damit beschäftigst...und das
                stimmt, ich als user kann und soll auch keine Wochentage ankreuzen,
                das ist nur die Ausgabe. In einer Eingabemaske werden diese
                angekreuzt.

                Das mit den Wochentagen ist in der Tat schwer zu erklären. Aber ich
                werde mein bestes geben

                1. Es können für diese Ausgabe Events mit einem Anfangs und Enddatum
                angelegt werden. (date - Format in der DB) Für Events, welche z.B.
                nur einen Tag lang gehen oder für Events welche über Wochen
                oder Monate hinweg gehen. (Bei ein-tages Events sind aber
                Anfangs- u. Enddatum gleich daher wird nur das Anfangsdatum
                angezeigt)

                2. Die meisten Events, welche über einen längeren Zeitraum gehen,
                finden nur ein- bis öftermal in einer Woche satt. Deshalb habe ich bei
                der Eingabemaske der Events Kontrollkästchen von Mo - So gesetzt
                um diesen in der DB eine 1 oder 0 zu verpassen. Bei ein-tages Events
                wird kein Kästchen angekreuzt.

                3. Gibt der User in der Ausgabe nun ein Datumsbereich ein, welcher
                nur im Bereich vom z.B. 17.10 (ein Do) - 30.10 (ein Sa) liegt, werden
                bisher auch Events angezeigt, welche nicht an diesen Tagen statt-
                finden (z.B. ein Häkchen am Mo und Di haben) aber z.B. im Zeitraum
                vom 20.09 - 03.12 liegen. Da dieser Event ja in dem vom User einge-
                gebenen Zeitraum liegt.

                4. Nun meine Frage, wie kann ich es realisieren, das dies nicht
                passiert?


                Das ist bestimmt nicht einfach, deswegen wende ich mich ja an euch.

                (Falls Du die Eingabemaske noch sehen möchtest bitte Bescheid
                sagen, damit ich die URL posten kann)
                Ein Sechser im Lotto und entdecke die Möglichkeiten.

                Kommentar


                • #9
                  nehmen wir noch einmal die bekannte query und ändern sie ein wenig ....

                  Code:
                  SELECT
                      e_start,
                      e_ende,
                      e_name    
                     e_weekday_mo,
                     e_weekday_di,
                     e_weekday_mi,
                     e_weekday_do,
                     e_weekday_fr,
                     e_weekday_sa,
                     e_weekday_so,
                     IF(e_start=e_ende, "ja", "nein") einmalig_ja_nein
                  FROM
                     e_tabelle
                  WHERE
                     e_start BETWEEN '2005-10-20' AND '2005-10-23' OR
                     e_ende BETWEEN '2005-10-20' AND '2005-10-23'
                  wenn du diese query aufrufst, was passiert dann?

                  theoretisch bekommst du alle termine im angebenenen zeitraum ...... um zu erkennen, ob das ein einmaliger termin war, habe ich dir einen marker eingebaut mit dem IF. (das könnte mal auch in php prüfen, wenn mal will)

                  desweiteren werden grundsätzlich alle wochentage abgefragt. ist hier eine 1 drin, ist der termin an diesem tag. das ganze kann man für die ausgabe auch in php prüfen oder o.g. query entsprechend dem einen beispiel ebenfalls anpassen. (würde ich machen)

                  so ... jetzt bist du wieder am zuge ....
                  INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                  Kommentar


                  • #10
                    Da bin ich wieder:

                    wenn du diese query aufrufst, was passiert dann?
                    Ich erhalte alle termine im angebenenen zeitraum. Ich habe allerdings den Marker nicht eingebaut,

                    1. Weil ich nicht genau weiß wie das gemeint ist (kann aber wie du im unteren Abschnitt meinst für die Tage gut sein)

                    2. weil es mir darum geht das bei der Ausgabe nicht zweimal das gleiche Datum stehen zu haben.
                    Darum habe ich die Ausgabe so unterdrückt:

                    PHP-Code:
                    "<td><strong>$Result->date1";
                    if (
                    $Result->date2 !== $Result->eventdateformat)
                    echo 
                    " - $Result->date2";
                    else { };
                    echo 
                    "</strong></td>"
                    Ja, es werden alle Wochentage abgefragt und es wird eine 1 bei gesetzter 1 ausgegeben. Nun könnte man in der Ausgabe sagen schreibe anstatt der 1 den jeweiligen Wochentag hin. So kann der User erkennen, das dieser Event öfter und an welchen Tagen dieser stattfindet.

                    Aber es ist leider nicht so dass:

                    ist hier eine 1 drin, ist der termin an diesem tag.
                    sonden der Termin/ Event liegt in dem vom User gewählten Zeitraum z.B. ('2005-10-20' AND '2005-10-23'). Das heißt aber, das dieser Zeitraum nur 4 Wochentage hat. z.b. Mo, Di, Mi, Do.

                    Läuft der Termin aber über ein Jahr lang und nur jeden Fr erscheint er ja trotzdem und dies soll vermieden werden.

                    Andernfalls kann man nur hoffen, das der User nur Zeitspannen abfragt, indem alle Wochentage vorkommen.

                    Zur Veranschaulichung habe ich auf der Testseite ein TestEvent vom 30.10 - 24.11.05 erstellt, welcher nur am So und Do stattfindet.

                    Gibt man nun die Zeitspanne 31.10 - 2.11 ein, erhält man als Ausgabe dieses Event. Jedoch interessiert das den User nicht, weiler ja nur, durch die Datumseingabe, von Mo - Mi nach einem Event sieht und der Testevent zwar in der Zeitspanne liegt jedoch nur am Do und So stattfindet.

                    Es ist schwierig und ich kann nur hoffen das ich nicht versuche schon vorhandene Funktionen nachzubauen oder ähnliches.


                    Wie meinst Du das eigentlich?

                    oder o.g. query entsprechend dem einen beispiel ebenfalls
                    anpassen. (würde ich machen)
                    Zuletzt geändert von smartdragon; 26.10.2005, 00:28.
                    Ein Sechser im Lotto und entdecke die Möglichkeiten.

                    Kommentar


                    • #11
                      oder so...

                      Gebe mir alle events aus, welche zwischen date1 und date2 liegen und die einen Wochentag in der Wochentagsspalte (z.B. tuesday) mit 1 gekennzeichnet haben welcher (also der Wochentag) auch zwischen date1 und date2 liegt.

                      Nun macht es wahrscheinlich wenig Sinn, wenn zwischen date1 und date2 mehr als 7 Tage liegen, da ja da schon bereits alle Wochentage enthalten sind.

                      Also müsste die query wohl so aussehen:

                      Gebe mir alle events aus, welche zwischen date1 und date2 liegen und ist der Zeitraum zwischen date1 und date2 kleiner als 7 Tage, dann die die einen Wochentag in der Wochentagsspalte (z.B. tuesday) mit 1 gekennzeichnet haben welcher (also der Wochentag) zwischen date1 und date2 liegt.

                      Nu habe ich keine Ahnung wie ich dies in einer mysql-Syntax schreiben kann....
                      Ein Sechser im Lotto und entdecke die Möglichkeiten.

                      Kommentar


                      • #12
                        sei mir nicht böse. aber irgendwie blicke ich durch deine logik nicht genug durch, dass ich dir noch einen tipp geben kann..... evtl versucht es mal ein anderer?
                        INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                        Kommentar


                        • #13
                          Ich bin dir nicht böse

                          Aber vielleicht kann mir wirklich einer ja ne Lösung o.ä. geben.


                          Danke jedenfalls.
                          Ein Sechser im Lotto und entdecke die Möglichkeiten.

                          Kommentar

                          Lädt...
                          X