Frage

Für einen Kunden Ich habe eine Website gebaut travel. Nun fragten sie mich, um einige Dinge zu optimieren und zu automatisieren. Eines dieser Dinge ist, dass die Unterkünfte in der Suchliste gezeigt gebucht werden müssen.

Vereinfachtes ist dies die Struktur

Ich habe eine AccommodationObject, eine Unterkunft hat 1 oder mehr PricePeriods.

Was ich brauche die letzte priceperiod zu einer bestimmten Unterkunft verbunden auszusuchen zu tun. Die priceperiod hat ein Feld ‚date_until‘, die einen Zeitstempel ist. Bei der Abfrage muss eine Überprüfung durchgeführt werden kann, muss der aktuelle Zeitstempel kleiner sein als der letzte Zeitstempel von einem priceperiod.

Das ist einfach mit einer zweiten Abfrage zu tun, die nur die letzte Zeitmarke von allen priceperiod-Zeilen aus der priceperiod Tabelle an die angegebenen Unterkunft verbunden wird.

Ich frage mich, ob dies der beste Fall ist, oder wenn ich eine Unterabfrage für diese verwendet werden soll. Und wenn ja, wie würde eine Abfrage wie folgt aussehen? Ich habe nicht viel Erfahrung mit Unterabfragen haben.

Update

Tabellenstruktur (einfach)

Unterkunft -> ID

PricePeriod -> ID | AccommodationID | DateUntil

Vereinfacht:

SELECT fieldlist FROM Accommodation WHERE ID = $id
SELECT MAX(DateUntil) FROM PricePeriod WHERE AccommodationID = $id

Aber ich würde in einer Abfrage so. Ich hoffe, dass es auf diese Weise klar ..

War es hilfreich?

Lösung

Es hängt von einer Reihe von Dingen, aber was Sie tun sollten, ist ein paar verschiedene Alternativen versuchen.

Persönlich würde ich tun:

SELECT fieldlist, 
(SELECT MAX(DateUntil) FROM PricePeriod) WHERE AccomidationID = a.id) AS last_date
FROM Accommodation AS a
WHERE a.id = $id

Sie können auch tun (aber sie kann nicht so effizient sein) ...:

SELECT fieldlist, MAX(b.DateUntil)
FROM Accommodation AS a
JOIN PricePeriod AS b ON a.id = b.AccommodationID
WHERE a.id = $id
GROUP BY a.id

Die große Sache ist, sie alle versuchen (Sicherstellen, dass SQL_NO_CACHE zu verwenden, so dass die Ergebnisse wahr sind jedes Mal). Führen sie durch EXPLAIN, um zu versuchen, um zu sehen, wie „schwer“ sind sie ...

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top