Domanda

Per un client ho costruito un sito web travelagency. Ora mi hanno chiesto di ottimizzare e automatizzare alcune cose. Una di queste cose è che le strutture indicate nella searchlist devono essere prenotabili.

semplificata questa è la struttura

Ho un AccommodationObject, un alloggio dispone di 1 o più PricePeriods.

Quello che ho bisogno di fare scegliere l'ultimo priceperiod collegato ad un dato alloggio. Il priceperiod ha un campo 'date_until', che è un timestamp. Nella query un controllo deve essere effettuato, timestamp corrente deve essere inferiore l'ultimo timestamp da una priceperiod.

Questo è facile da fare con una seconda query, che ottiene solo l'ultimo timestamp dalla tabella priceperiod da tutte le priceperiod-file collegati alla struttura data.

Mi chiedo se questo è il caso migliore, o se devo usare una sottoquery per questo. E se sì, come sarebbe una query come questo look? Non ho molta esperienza con sottoquery.

Aggiorna

Tavolo struttura (semplice)

Alloggio -> ID

PricePeriod -> ID | AccommodationID | DateUntil

semplificata:

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

Ma vorrei a questo in una query. Spero che sia chiaro questo modo ..

È stato utile?

Soluzione

E 'dipende da una serie di cose, ma ciò che si dovrebbe fare è cercare un paio di diverse alternative.

Personalmente, vorrei fare:

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

Si potrebbe anche fare (Ma non può essere il più efficiente) ...:

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 cosa più grande è quello di provarli tutti (assicurarsi di utilizzare SQL_NO_CACHE modo che i risultati sono vere ogni volta). eseguirli attraverso EXPLAIN per provare a vedere come "pesanti" sono ...

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top