所以这是我的数据库设计,我想选择所有可用的场馆,给出日期数组: events.date_of_use
.
SELECT * FROM venues v
LEFT JOIN reservations r ON v.venue_id = r.venue_id
LEFT JOIN events e ON e.reservation_id = r.reservation_id
WHERE e.date_of_use NOT IN ('$dates')
``` `$dates` 只是一串日期(即2018年11月11日、2018年11月12日)。但是,结果返回一个空数组事实上,我有很多场地还没有预定。
![](https://i.stack.imgur.com/2zNgZ.png)
4条答案
按热度按时间vshtjzan1#
为什么不使用simplify查询进行调试?
像这样的
在php中使用内爆函数替换日期数组。
此外,最好使用日期类型而不是文本。https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html#function_date-格式
dauxcl2d2#
您可以用php构建数组,如下所示:
然后像这样附加php变量:
s8vozzvw3#
文件中有错误
$dates
字符串。格式应为
'11-11-2018', '11-12-2018'
i、 每一个值都应该用引号括起来IN
查询工作。当前,您的查询如下所示
它将搜索具有2个日期的行,而不是单个日期。
下面是正确的查询结果,
更新1
根据你的评论,你必须用
','
.然后是下面的
WHERE
条款将完美运作,更新2
如果
events
以及reservations
表为空,则需要使用LEFT JOIN
并获取日期使用的行IS NULL
```SELECT * FROM venues v
LEFT JOIN reservations r ON v.venue_id = r.venue_id
LEFT JOIN events e ON e.reservation_id = r.reservation_id
WHERE e.date_of_use NOT IN ('$dates')
OR e.date_of_use IS NULL
af7jpaap4#
如果
$dates
如您所说,变量是一个带有逗号分隔日期的字符串“11-11-2018,11-12-2018”,查询变为:而正确的格式是:
i、 e.每个日期都应单独列明
IN
日期格式为yyyy-mm-dd。处理场馆不存在活动的情况: