当前位置: 首页 > 知识库问答 >
问题:

MySQL在查询中使用计数来搜索多行的可用性

慕容成和
2023-03-14

我使用一个表mrp来存储多房间物业,并使用第二个表预订来存储物业预订的日期。因此,我有以下表格:

property_idproperty_namenum_rooms

预订(酒店标识,预订标识,日期)

每当预订一个酒店时,都会在bookings表中创建一个条目,因为每个表都有多个房间,所以在同一天可以有多个预订。

我正在使用以下查询:

SELECT * FROM mrp 
   WHERE property_id 
     NOT IN (SELECT property_id FROM booking WHERE `date` >= {$checkin_date} AND `date` <= {$checkout_date}

但是,尽管该查询适用于只有一个房间的房产(也就是说,它只列出在您提供的日期之间没有完全预订的房产),但它不显示已经预订但仍有空房间的房产。我们如何使用count和num_rooms表在我的结果中显示仍然空闲的房间,即使它们在所选日期之间已经有预订,并在我的结果中显示空闲房间的数量。

共有3个答案

茅涵映
2023-03-14

您必须排除在入住日期和退房日期之间预订的房产。此查询应执行以下操作:

SELECT * FROM srp WHERE property_id NOT IN (
    SELECT property_id FROM booking WHERE `date` >= {$checkin_date} AND `date` <= {$checkout_date}
)
上官恩
2023-03-14

您已接近,但需要更改日期条件并添加一个条件,以匹配外部和内部查询中的记录(均在内部查询的<code>WHERE

SELECT * FROM srp 
WHERE NOT EXISTS 
    (SELECT * FROM bookings_srp 
     WHERE srp.booking_id = bookings_srp.booking_id
     AND `date` >= {$check-in_date} AND `date` <= {$check-out_date})
羊冠玉
2023-03-14

您需要3个级别的查询。最里面的查询将列出在您的日期范围内的任何一天所有房间都已全部预订(或超额预订)的属性和日期。中间的查询将其缩小到一个property_id列表。最外层的查询列出了不在该列表中的所有属性。

SELECT *
FROM mrp
WHERE property_id NOT IN (
    -- List all properties sold-out on any day in range
    SELECT DISTINCT Z.property_id
    FROM (
        -- List sold-out properties by date
        SELECT MM.property_id, MM.num_rooms, BB.adate
        , COUNT(*) as rooms_booked
        FROM mrp MM
        INNER JOIN booking BB on MM.property_id = BB.property_id
        WHERE BB.adate >= @checkin AND BB.adate <= @checkout
        GROUP BY MM.property_id, MM.num_rooms, BB.adate
        HAVING MM.num_rooms - COUNT(*) <= 0
    ) as Z
)
 类似资料:
  • 我有一个由3列组成的表格。 user_id,certificate_type,approved 每个user_id可以有多行,每行的certificate_type介于1和30之间。 我要做的是用一组不同的证书类型搜索表,并生成一个与组合匹配的所有user_id的列表。如果行已批准=1,我只想要一个结果。 我可以想出非常复杂的方法来进行多个搜索,但我怀疑在SQL中有一个简单的查询,因为我不相信我正

  • 问题内容: 我有两个表,一个表用于新闻,另一个表用于评论,我想获取其状态已设置为批准的评论数。 但是此查询的问题在于,无论是否存在与该新闻相对应的评论,为评论列获取的最小值为1。 任何帮助将是非常可贵的。 问题答案: 使用代替 请尝试以下方法:

  • 问题内容: 我正在尝试在我的文档归档系统上为高级搜索页面编写查询。我正在尝试通过多个可选参数进行搜索。我有大约5个参数,它们可以是空字符串或搜索字符串。我知道我不必检查每个字符串或为空并为每个组合创建一个单独的存储过程。 编辑:最终使用: 问题答案: 您可以这样使用COALESCE(或ISNULL):

  • 问题内容: 我有一个关于MYSQL中的选择查询的问题 我有两个不同的表,我想获得一定的结果 我使用了COUNT方法,该方法只给我结果(> = 1) 但实际上,我想使用包含零的所有计数怎么做? 我的查询是: 第一张桌子:Content_hits 第二张表:Content_tag 结果但不完整 例如:tag_id = 1的Subsrciber6应该具有count(*)= 0 问题答案: 现在,您已经进

  • 问题内容: 我目前有一个表,用于存储大量项目的统计数据,例如视图,下载,购买等。为了对每个项目进行一次操作计数,我可以使用以下查询: 这给了我所有的内容以及他们的看法。然后,我可以将其他变量的“视图”更改为“购买”或“下载”。但是,这意味着对数据库的三个单独的调用。 一口气拿下所有三个都可以吗? 问题答案: 将返回一个表, 其中每个item_id和operation一行一行 ,包含三列:item_

  • 问题内容: 我正在尝试在单个查询中计算两列,但结果却为medcount和uploadcount吐出了相同的值。有什么建议? 问题答案: 使用: