如何查询可用项目?

时间:2013-09-25 14:12:20

标签: mysql

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

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

tbl_reservations
-barcode
-dateReserved
-timeStart
-timeEnd

tbl_items
-barcode
-itemName
-itemDesc

我想做的是这样的事情(请参考图片):
Reservations

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

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

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

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

更新:这是新代码......我很惊讶,因为它在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');

1 个答案:

答案 0 :(得分:0)

尝试以下代码。我相信为一个OR切换一个AND就可以了。外部AND要求其中一个条件为真。内部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。