0

我想知道是否有人可以帮助我查询我的 mysql 数据库的可用性。

所以,我有两个表:tbl_items(单位项目)和 tbl_reservations。

tbl_reservations
-barcode
-dateReserved
-timeStart
-timeEnd

tbl_items
-barcode
-itemName
-itemDesc

我想做的是这样的(请参考图片):
预订

到目前为止,这是我的查询:

SELECT a.bcode, b.resdate, b.timestart, b.timeend
FROM tbl_items a
INNER JOIN tbl_reservations b
on a.bcode=b.bcode
WHERE a.bcode
not in
(
  Select bcode
  FROM tbl_reservations
  WHERE bcode not in
  (
  SELECT bcode
  FROM tbl_reservations
  where resdate='2013-09-25' AND retdate is null
  )
AND ((timestart < '10:00'AND timeend < '10:00')
AND (timestart > '15:00' AND timeend > '15:00'))
)

但即使有这么长的代码,它仍然允许一些已经预订或应该不可用的设备出现。

有什么帮助吗?

谢谢!:D

带有保留的结果集的屏幕截图,我的意思是不包含在结果集中:
结果集

突出显示的是与上面代码中的条件重叠的那些......

更新:这是新代码...我很惊讶,因为它返回了在 10:00 之前同时具有 timestart 和 timeend 的行。

select rsv.controlno, rsv.bcode, rsv.resdate, rsv.timestart, rsv.timeend
FROM
(
  select bcode
  from tbl_items
) i
inner join tbl_reservations rsv
on i.bcode=rsv.bcode
WHERE resdate='2013-09-25' AND NOT (rsv.timeend > '10:00' AND rsv.timestart < '15:00');
4

1 回答 1

0

试试下面的代码。我相信将 AND 换成 OR 就可以解决问题。外部 AND 要求条件之一为真。inside OR 会在期间之前抢到预订,或者在期间外抢到,但在期间内不抢。

SELECT a.bcode, b.resdate, b.timestart, b.timeend
FROM tbl_items a
INNER JOIN tbl_reservations b
on a.bcode=b.bcode
WHERE a.bcode
not in
(
  Select bcode
  FROM tbl_reservations
  WHERE bcode not in
  (
  SELECT bcode
  FROM tbl_reservations
  where resdate='2013-09-25' AND retdate is null
  )
AND 
    ((timestart < '10:00' AND timeend < '10:00')
    OR (timestart > '15:00' AND timeend > '15:00')

    )
)

在时间范围内将 AND 换成 OR。

于 2013-09-25T15:42:49.533 回答