mysql选择日期不包含小时_MySQL选择日期不在日期之间的行

我有一个预订系统,我需要从数据库中选择任何可用的房间。基本设置是:

table: room

columns: id, maxGuests

table: roombooking

columns: id, startDate, endDate

table: roombooking_room:

columns: id, room_id, roombooking_id

我可以循环遍历我的日期范围并使用以下sql:

SELECT `id`

FROM `room`

WHERE `id` NOT IN

(

SELECT `roombooking_room`.`room_id`

FROM `roombooking_room`, `roombooking`

WHERE `roombooking`.`confirmed` =1

AND DATE(%s) BETWEEN `roombooking`.`startDate` AND `roombooking`.`endDate`

)

AND `room`.`maxGuests`>=%d

其中,%$1是循环日期,%2d是要预订的来宾数。但是,如果有比任何房间都多的客人,这只会返回false,而且必须有一种更快的方法来完成这项工作,而不是使用php循环并运行查询?

解决方案,基于ircmaxwell的答案:

$query = sprintf(

"SELECT `id`, `maxGuests`

FROM `room`

WHERE `id` NOT IN

(

SELECT `roombooking_room`.`room_id`

FROM `roombooking_room`

JOIN `roombooking` ON `roombooking_room`.`roombooking_id` = `roombooking`.`id`

WHERE `roombooking`.`confirmed` =1

AND (`roomBooking`.`startDate` > DATE(%s) OR `roomBooking`.`endDate` < DATE(%s))

)

AND `maxGuests` <= %d ORDER BY `maxGuests` DESC",

$endDate->toString('yyyy-MM-dd'), $startDate->toString('yyyy-MM-dd'), $noGuests);

$result = $db->query($query);

$result = $result->fetchAll();

$rooms = array();

$guests = 0;

foreach($result as $res) {

if($guests >= $noGuests) break;

$guests += (int)$res['maxGuests'];

$rooms[] = $res['id'];

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值