首页 > 解决方案 > 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)。

标签: phpmysql

解决方案


$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

如果eventsreservations表为空,那么您需要使用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

推荐阅读