Question

Pour un client, j'ai construit un site Web de travelagency. Maintenant, on m'a demandé d'optimiser et automatiser certaines choses. Une de ces choses est que les logements indiqués dans LISTERECHERCHEE doivent être réservées.

simplifié c'est la structure

J'ai un AccommodationObject, un logement a 1 ou plus PricePeriods.

Qu'est-ce que je dois faire choisir la dernière priceperiod connecté à un logement donné. Le priceperiod a un champ « date_until », qui est un horodatage. Dans la requête une vérification doit être faite, l'horodatage actuel doit être inférieure à la dernière estampille temporelle d'un priceperiod.

Ceci est facile à faire avec une deuxième requête qui obtient juste la dernière estampille temporelle de la table priceperiod de toutes les lignes de priceperiod-connectés au logement donné.

Je me demande si c'est le meilleur des cas, ou si je devrais utiliser un sous-requête pour cela. Et si oui, comment une requête comme ce regard? Je n'ai pas beaucoup d'expérience avec les sous-requêtes.

Mise à jour

Tableau la structure (simple)

Hébergement -> ID

PricePeriod -> ID | AccommodationID | DateUntil

simplifié:

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

Mais je voudrais cela dans une requête. J'espère que c'est clair que cette façon ..

Était-ce utile?

La solution

Il dépend d'un certain nombre de choses, mais ce que vous devez faire est d'essayer quelques alternatives différentes.

Personnellement, je le ferais:

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

Vous pouvez aussi le faire (mais il ne peut pas être aussi efficace) ...:

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

La grande chose est de les essayer (Assurez-vous d'utiliser SQL_NO_CACHE afin que les résultats sont vraies à chaque fois). les exécuter par EXPLAIN pour essayer de voir comment ils sont « lourds » ...

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top