Pregunta

Para un cliente que he construido un sitio web travelagency. Ahora me pidieron que optimizar y automatizar algunas cosas. Una de estas cosas es que los alojamientos que aparecen en la searchlist debe estar disponible.

simplificado esta es la estructura

Tengo una AccommodationObject, un alojamiento tiene 1 o más PricePeriods.

¿Qué tengo que hacer escoger la última priceperiod conectado a un alojamiento dado. El priceperiod tiene un campo 'date_until', que es una marca de tiempo. En la consulta de un cheque debe ser hecho, fecha y hora actual debe ser inferior a la última hora de un priceperiod.

Esto es fácil de hacer con una segunda consulta que sólo se pone la última fecha y hora de la mesa priceperiod de todas las filas priceperiod-conectados al alojamiento dado.

Me pregunto si este es el mejor de los casos, o si debería usar una subconsulta para esto. Y si es así, ¿cómo lo haría una consulta como esta mirada? No tengo mucha experiencia con subconsultas.

Actualizar

Estructura de la tabla (simple)

Alojamiento -> ID

PricePeriod -> ID | AccommodationID | DateUntil

simplificado:

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

Pero me gustaría esto en una consulta. Espero que sea claro esta manera ..

¿Fue útil?

Solución

Depende de una serie de cosas, pero lo que debe hacer es tratar algunas alternativas diferentes.

En lo personal, me gustaría hacer:

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

También podría hacer (pero puede no ser tan eficiente) ...:

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

Lo más importante es tratar a todos ellos (Asegúrese de utilizar SQL_NO_CACHE por lo que los resultados son verdad cada vez). Ejecutar a través de EXPLAIN a tratar de ver cómo "pesada" que son ...

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top