php - MySQL NOT IN 函数的数据数组
问题描述
这是我的查询。UsingWHERE IN
在 MySQL GUI 中正常工作,但是,当我运行此查询时,它返回一个空结果。如果表格中存在日期,我已经手动检查了它们events
,它们确实存在。
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
只是一串日期(即 11-11-2018、11-12-2018)。
解决方案
$dates
字符串中有错误。
它应该被格式化,'11-11-2018', '11-12-2018'
即每个值都应该用引号括起来以使IN
查询工作。
目前,您的查询看起来像
WHERE e.date_of_use NOT IN ('11-11-2018, 11-12-2018');
这将搜索具有 2 个日期而不是单个日期的行。
这是正确查询的样子,
SELECT * FROM venues v
JOIN reservations r ON v.venue_id = r.venue_id
JOIN events e ON e.reservation_id = r.reservation_id
WHERE e.date_of_use NOT IN ('11-11-2018', '11-12-2018')
更新 1
根据您的评论,您必须使用 内爆数组','
。
$dates = implode( "','", $date );
然后下面的WHERE
子句将完美运行,
WHERE e.date_of_use NOT IN ('$dates')
更新 2
如果events
和reservations
表为空,那么您需要使用LEFT JOIN
并获取 date_of_use 所在的行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