题
对于客户,我已经建立了Travelagency网站。现在,他们要求我优化并自动化一些东西。这些事情之一是,搜索清单中显示的住宿必须是可预订的。
简化了这是结构
我有一个住宿,一个住宿有1个或以上的价格。
我需要做的是与给定住宿相关的最后一个价格。 PricePeriod具有一个“ date_until”字段,这是时间戳。在查询中必须进行检查,当前的时间戳必须小于PricePeriod的最后时间戳。
第二个查询很容易做到这一点,该查询刚刚从价格上面的所有价格播放到给定住宿的所有价格上的时间戳。
我想知道这是否是最好的情况,或者我是否应该为此使用子查询。如果是这样,这样的查询看起来如何?我没有太多的子征服经验。
更新
表结构(简单)
住宿 - > ID
PricePeriod-> ID |住宿| dateuntil
简化:
SELECT fieldlist FROM Accommodation WHERE ID = $id
SELECT MAX(DateUntil) FROM PricePeriod WHERE AccommodationID = $id
但是我想一个查询。我希望这很清楚。
解决方案
这取决于许多事情,但是您应该做的是尝试一些不同的选择。
就我个人而言,我会做:
SELECT fieldlist,
(SELECT MAX(DateUntil) FROM PricePeriod) WHERE AccomidationID = a.id) AS last_date
FROM Accommodation AS a
WHERE a.id = $id
您也可以做(但可能不会那么高效)...:
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
最大的事情是尝试所有这些(请务必使用 SQL_NO_CACHE
使结果每次都是正确的)。将它们穿过 EXPLAIN
试图看看他们有多“沉重” ...
不隶属于 StackOverflow