Komplexer Datumsbereich mit WP_Query und BETWEEN

Hintergrundgeschichte

Wir haben eine Reihe von Ereignissen innerhalb eines benutzerdefinierten Nachrichtentyps für Ereignisse. Ihnen sind jeweils die folgenden benutzerdefinierten Felder zugeordnet:

  • start_date
  • end_date

Am Front-End haben wir eine Sidebar mit Filtern, wo der Benutzer wählen kann, wie er Ereignisse suchen möchte (dh verschiedene Taxonomien, Startdatum für die Reise in der Stadt, Enddatum, etc.). Mit den event_begin und event_end suchen wir die database ab.

Das Problem

Ich habe Probleme einschließlich eines lose abgefragten Ergebnisses. Strikte Übereinstimmungen tauchen auf, aber der Stakeholder für das Projekt sagt, dass die Suche zu streng ist. Ich habe das Konzept des Aufgebens des Frontend- event_end in den event_end des Benutzers event_end , aber ich bin mir nicht ganz sicher, ob das an dieser Stelle selbst notwendig ist.

Wenn ich nach Ereignissen suche, kann ich meine meta_query strukturieren:

  • Ereignisse mit einem Startdatum und einem Enddatum zwischen den beiden ausgewählten Daten werden angezeigt
  • Ereignisse, bei denen das Startdatum zwischen den beiden ausgewählten Daten liegt, werden angezeigt
  • Ereignisse, bei denen das Enddatum zwischen den zwei ausgewählten Daten auftritt, werden angezeigt

Aber was ist, wenn ich so vorschaue:

  • event_begin 7/15/2016
  • event_end 15.07.2016

… aber eine Veranstaltung in der database haben, in der die benutzerdefinierten Felder zeigen, dass die Veranstaltung tatsächlich eine Woche lang ist 7/11/2016 – 7/16/2016.

Dieses Ereignis würde nicht von meiner Abfrage zurückgegeben, da keines der obigen Übereinstimmungen vorliegt. Aber technisch gesehen, wenn ich am 15.7.2016 (heute) in der Stadt bin, sollte ich in der Lage sein, dieses Event während der Geschäftsreise zu sehen (und möglicherweise zu besuchen).

Gedanken

Im Allgemeinen speichern wir keinen Ereignisbereich als separate Daten für jeden Tag in der Serie. Wir (als Menschen) speichern Datumsbereiche; also bin ich sicher, dass es einen logischen Weg gibt, sich diesem zu nähern. Ich habe einfach nichts in meinem Suchen oder Forschen gefunden.

Danke für deine Hilfe und deine Gedanken!

Solutions Collecting From Web of "Komplexer Datumsbereich mit WP_Query und BETWEEN"

Es ist ein wenig schwer in meta_query Code für komplizierte Fälle wie diese und ohne Zugriff auf Daten zu denken. 🙂

Was Sie arbeiten, kann als zwei folgenden Bedingungen ausgedrückt werden:

  • start_date BETWEEN event_begin und event_end
  • end_date BETWEEN event_begin und event_end

Ihr erster Fall mit beiden dazwischen scheint irrelevant, da diese beiden es sowieso fangen werden.

Die Herausforderung, die Sie mit dem Rest davon haben, ist, dass Sie umgekehrte Logik wollen – event_begin oder event_end BETWEEN start_date und end_date . Aber Sie können es nicht auf die gleiche Weise express, da diese für jedes Ereignis einzigartig sind.

Aber es interessiert Sie nicht wirklich, wenn sie es sind, nur dass sie nach Daten suchen.

So können zwei weitere Bedingungen ausgedrückt werden als:

  • ( start_date < = event_begin ) AND ( end_date > = event_begin ) (Ereignisdaten bei oder um den event_begin )
  • ( start_date < = event_end ) AND ( end_date > = event_end ) (Ereignisdaten am oder um das event_end herum)

Wiederum habe ich Mühe, dies als Meta-Abfrage “in der Theorie” zu schreiben, aber da Meta-Anfragen verschachtelt werden können, sollten Sie in der Lage sein, all dies in ihre Logik einzubauen.

PS Performance könnte eine Überlegung werden und eine Zusammenfassung mehrerer einfacherer Abfragen anstelle eines einzigen komplexen Abfragens erfordern.