Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

MySQL | Termin liegt im angegebenen Monat

Empfohlene Antworten

Veröffentlicht

Hallo Community :)

ich hab' mal wieder ein Problem mit einer MySQL-Query...

In einer Tabelle mit u.a. den Feldern DateBegin und DateEnd (Start- & Enddatum einer Veranstaltung) möchte ich alle Einträge suchen, welche beispielsweise im Juli 2010 stattfinden - auch diese, welche z.B. im Februar beginnen und im August enden.

Anschließend möchte ich - gruppiert nach dem entsprechendem Tag im Monat - anzeigen, wie viele Veranstaltungen an diesem Tag stattfinden.

Meine aktuelle Query lautet bisher... (ich denke, das ist soweit ganz selbsterklärend)

SELECT

  DateBegin  Datum,

  COUNT(*)   Anzahl

FROM

  Festivals

WHERE

     DateBegin BETWEEN "2010-07-01" AND LAST_DAY("2010-07-01")  # Beginnen in diesem Monat

  OR DateEnd   BETWEEN "2010-07-01" AND LAST_DAY("2010-07-01")  # Enden in diesem Monat

  OR "2010-07-01" BETWEEN DateBegin AND DateEnd                 # Beginnen vor und enden ausserhalb dieses Monats

GROUP BY

  Datum

ORDER BY

  Datum
(ein DateBegin LIKE "2010-07-%" habe ich vermieden, da der Auswahl-Bereich später unter Umständen dynamisch änderbar sein soll) ... alternative WHERE-Klausel nach dieser Idee ... (finde ich aber noch weniger übersichtlich)
[...]

WHERE 

     ("2010-07-01" BETWEEN DateBegin AND DateEnd OR LAST_DAY("2010-07-01") BETWEEN DateBegin AND DateEnd)

  OR ("2010-07-01" < DateBegin AND LAST_DAY("2010-07-01") > DateEnd)

[...]

Meine Probleme dabei:

1) Eine Veranstaltung, die z.B. am 02. Juli beginnt und am 08. Juli endet, wird nur am 02. Juli im Feld "Anzahl" berücksichtigt.

Wie kann ich mehrtägige Veranstaltungen an jeweils allen entsprechenden Tagen mitzählen lassen? :confused:

2) Quasi ein "Unterproblem" von 1) ... Beginnt die Veranstaltung außerhalb des angegebenen Monats, liegt das Ergebnis-Feld "Datum" außerhalb des zuläässigen Bereichs

3) Da ich aus der Ergebnisliste (in PHP) eine Art "Kalenderblatt" erstellen möchte, sollen auch Tage "ohne Veranstaltungen" angezeigt werden. Wie bekomme ich das hin?

4) (eher weniger wichtig) Geht die Datumsauswahl eleganter? Ich finde die zwei Möglichkeiten für die WHERE-Bedingungen prinzipiell eigentlich eher ziemlich umständlich... :(

Bevor ich aus Verzweiflung noch eine Tabelle "Jahr-Monat-Tag" anlege und die auf die Query JOINe ... hat vielleicht einer von euch eine bessere Idee? :)

Viele Grüße,

freescale

Bearbeitet von freescale

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.