我试图在其他地方找到答案,但不能,但似乎我的查询有效,但没有返回预期的结果。
我需要运行检查以确定日期和时间集是否与表中的现有记录重叠。所以,我选择日期和时间并检查日期是否匹配,如果匹配,如果选择的时间落在表格中的时间之间。
这是表格中的示例条目:
| id | booking_date | start_time | end_time |
---------------------------------------------
| 1 | 2017-11-26 | 11:00 | 13:00 |
---------------------------------------------
我在表格中输入日期2017-11-27,时间为11:00 - 13:00。从技术上讲,这个DOESN&T; T重叠,因为表中的日期是第26个。
这是我的Doctrine查询:
$qb = $this->getEntityManager()->createQueryBuilder();
$qb->select('COUNT(b.id)')
->from('AppBundle:Booking', 'b')
->where('b.bookingDate = :date')
->andWhere('b.startTime BETWEEN :start AND :end')
->orWhere('b.startTime = :start')
->orWhere('b.endTime BETWEEN :start AND :end')
->setParameter('date', $date)
->setParameter('start', $start)
->setParameter('end', $end)
;
return $qb->getQuery()->getSingleScalarResult();
但由于某种原因,这总是返回一个计数1.检查实际的SQL似乎OR语句没有嵌套在AND中,所以它检查是否传递的日期在表中或者时间匹配(他们这样做)而不是日期匹配并且startTime
与所选startTime
相同或endTime
位于两者之间。
如何编写查询以包含此内容?
答案 0 :(得分:2)
与此相似
match_id team_id matches.date teams_att.date overall_rating
1 101 2012-05-17 2012-02-20 73
2 101 2014-07-11 2014-09-10 74
3 102 2010-05-21 2015-03-21 42
4 102 2017-10-24 2016-03-22 44