id product_id from_date to_date
1 12 2017/04/12 2017/04/21
2 12 2017/05/2 2017/05/8
3 32 2016/12/1 2016/12/7
产品表
id name etc etc
12 p1 23 12
32 p23 22 32
我正在使用mysql和php 在mysql查询中(由于某种原因无法显示完整查询) 有加入bw产品和订单表,这是查询中的条件
WHERE "2017-04-13"NOT BETWEEN `orders`.`from_date` AND `orders`.`to_date` AND "2017-04-21"NOT BETWEEN `orders`.`from_date` AND `orders`.`to_date`
正如我所说,这些表之间存在连接。在订单表中还有一些其他旧订单,因此连接实际上是在创建问题。尝试理解“1 - 加入发生:::订单表中所有行,其中product_id匹配被提取”然后“2 - 条件发生我们的行落在这些范围之间被消除但不属于此范围的那些范围不会被过滤那我们还有那个产品“
答案 0 :(得分:2)
我会使用NOT EXISTS语句:
select *
from products p
where not exists (
select *
from orders o
where o.product_id = p.id
and to_date >= '2017-06-13'
and from_date <= '2017-06-21'
)
我的话:选择所有没有重叠日期范围的订单的产品。
答案 1 :(得分:0)
将静态日期替换为包含用于搜索的用户输入的php变量。
SELECT * FROM product p INNER JOIN orders o ON p.id=o.product_id WHERE (from_date NOT BETWEEN '2017-06-13' AND '2017-06-21') AND (to_date NOT BETWEEN '2017-06-13' AND '2017-06-21') AND p.id=$pid;