1

对于一个客户,我建立了一个旅行社网站。现在他们要求我优化和自动化一些事情。其中之一是搜索列表中显示的住宿必须是可预订的。

简化这是结构

我有一个住宿对象,一个住宿有 1 个或多个 PricePeriods。

我需要做的是选择与给定住宿相关的最后一个价格周期。priceperiod 有一个字段“date_until”,它是一个时间戳。在查询中必须进行检查,当前时间戳必须小于价格周期的最后一个时间戳。

这很容易通过第二个查询来完成,该查询只是从连接到给定住宿的所有 priceperiod 行中的 priceperiod 表中获取最后一个时间戳。

我想知道这是否是最好的情况,或者我是否应该为此使用子查询。如果是这样,这样的查询会是什么样子?我对子查询没有太多经验。

更新

表结构(简单)

住宿->身份证

PricePeriod -> ID | 住宿ID | 日期直到

简化:

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

但我想在一个查询中做到这一点。我希望这样清楚..

4

1 回答 1

2

这取决于很多事情,但你应该做的是尝试一些不同的选择。

就个人而言,我会这样做:

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以尝试查看它们有多“重”...

于 2010-08-19T11:12:23.773 回答