MySQL - 查询日期范围的数据库

时间:2015-12-10 20:32:52

标签: php mysql

我有一个库存系统,用于添加可以租用的物品。在将新员工添加到系统之前,我正在尝试运行MySQL查询以查看项目是否已经出租。我必须加入2个表才能做到这一点;雇用和雇用_items。

雇用包含以下字段:hire_id, account_id, hire_start_date, hire_end_date, hire_return_date, total_hire_cost, notes and booking date

hire_items包含以下字段:hire_item_id, hire_id, item_id and item_hire_cost

我已经尝试了以下查询,这不会出错,但允许我添加一个已经雇用过项目的人员:

SELECT i.item_id
FROM hire_items AS i
INNER JOIN hire AS h ON i.hire_id = h.hire_id
WHERE ((item_id = $selected_item_id) AND ($hsd >= h.hire_start_date AND $hsd <= h.hire_return_date)) OR ((item_id = $selected_item_id) AND ($hed >= h.hire_start_date AND $hed <= h.hire_return_date)) OR ((item_id = $selected_item_id) AND ($hrd >= h.hire_start_date AND $hrd <= h.hire_return_date))

$hsd是雇用开始日期(来自输入)
$hed是雇佣结束日期(来自输入)
$hrd是雇用返回日期(来自输入)

1 个答案:

答案 0 :(得分:0)

SELECT i.item_id
FROM hire_items AS i
INNER JOIN hire AS h ON i.hire_id = h.hire_id
WHERE (item_id = $selected_item_id)
AND ($hsd NOT BETWEEN h.hire_start_date AND h.hire_return_date) 
AND ($hrd NOT BETWEEN h.hire_start_date AND h.hire_return_date) 
AND (h.hire_start_date NOT BETWEEN CAST($hsd AS DATE) AND CAST($hrd AS DATE))

查询

  1. ID的正确项目,但只有一次
  2. 输入的开始日期不是在雇用期间
  3. 输入的退货日期不是在雇用期间
  4. 输入的开始/返回时间不包括雇用时间