代码之家  ›  专栏  ›  技术社区  ›  Ben

子查询还是双重查询?

  •  1
  • Ben  · 技术社区  · 14 年前

    我为一个客户建立了一个旅行社网站。现在他们让我优化和自动化一些东西。其中之一就是搜索列表中显示的住宿必须是可预订的。

    这就是结构

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

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

    表结构(简单)

    住宿->ID

    PricePeriod->ID |住宿ID |日期截止

    简化:

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

    但我想在一个问题中回答这个问题。我希望这样很清楚。。

    1 回复  |  直到 13 年前
        1
  •  2
  •   ircmaxell    14 年前

    这取决于许多事情,但你应该做的是尝试几个不同的选择。

    就我个人而言,我会:

    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 想看看它们有多重。。。