In my question about searching for date ranges habe ich versucht, das Problem zu vereinfachen und versehentlich ein anderes und einfacheres Problem gestellt.Suche nach freien Steckplätzen in einem Buchungssystem
Anstatt diese Frage mit einer Bearbeitung zu komplizieren, werde ich das Problem stellen, das ich eigentlich beabsichtigte.
Ich habe zwei Tabellen Eigentum und Buchung. Buchungen haben einen Fremdschlüssel zu Eigenschaften sowie Start- und Enddatum.
Der Benutzer sucht nach freien Steckplätzen und liefert eine gewünschte Dauer in Tagen. Sie liefern auch eine Reihe von Starttermine, an denen sie interessiert sind. Daher wird eine Suche nach folgenden Kriterien durchgeführt: "Finden Sie alle Eigenschaften Ich möchte einen 3-Tage-Slot, der jederzeit im Mai beginnt."
Jetzt kann ich dies tun, indem: 1. Rennen 31 Abfragen für jeden potentiellen Starttag 2. alle Buchungen Mai zu finden, kondensieren sie in einer Reihe von 31 booleans Tage und Schleife durch für Schlitze Suche darstellt.
Ich nehme an (2) ist in den meisten Fällen effizienter. Gibt es bessere Algorithmen? Gibt es eine reine SQL-Lösung?
Ich werde Django verwenden und mein Dataset ist klein, also werde ich wahrscheinlich mit einem 'dummen' Approch in Ordnung sein, aber ich bin gespannt, wie der beste Algorithmus aussieht.
Sehr klug Ansatz, aber ich brauche die Buchungsdaten für zu viele andere Zwecke. Ich könnte eine Verfügbarkeitstabelle für jede Eigenschaft zusätzlich zu meinem aktuellen Buchungsschema haben. In diesem Sinne denormalisiert meine Daten, um eine Art der Suche zu erleichtern, aber in diesem Fall kann als eine vorzeitige Optimierung zählen. –
Ihre ursprünglichen Buchungsdaten sind immer noch da - sie haben nur eine extra Spalte mit entweder 'booked' boolean oder customerid. Wenn Sie die Verfügbarkeitstabelle mit where booked = true oder customerid> 0 durchsuchen, haben Sie den gleichen Datensatz wie in Ihrer Originaltabelle. Deshalb verdoppelt es die Größe des Tisches und enthält sowohl gebuchte als auch verfügbare Slots. –
+1 Wahrscheinlich nicht die Lösung, die das OP sucht, aber sehr ordentlich. –