使用BETWEEN时更正SQL Select语句

时间:2011-05-31 19:56:09

标签: php mysql select date

我需要在这里做一些事情,我对这应该如何运作感到困惑。

以下是我需要使用的变量:

Date Range
Employee ID
Team

以及可能的其他搜索字词(acct_number ='$ _ REQUEST [q]'),如果有人想要搜索特定的帐号。

每个变量都填充一个下拉选择,第一个选项是*表示所有记录。日期使用日期选择器,日历样式设置,并自动设置为日期1 =七天前和日期2 =今天。

我的查询:

SELECT * FROM table
WHERE job_date BETWEEN '$search_date1' AND '$search_date2' AND
    employee_id='$searched_employee' AND team='$searched_team' AND
    acct_number='$_REQUEST[q]'
ORDER BY employee_id desc

我知道记录在那里,但我的搜索仍然没有返回任何记录。在该日期之后,AND employee_id ='$ searching_employee'可以是*所以它应该返回所有记录,并且团队也是如此。

回应变量以确保设置某些东西给了我: 在2011-05-01和2011-05-31之间以及团队“团队”中找不到“员工”的记录。

使用BETWEEN后,我可以在Select语句中使用AND请求更多吗?

提前致谢!

- 乔尔

3 个答案:

答案 0 :(得分:1)

您不能对WHERE子句使用'*'通配符。

尝试将变量用于您在查询中添加的条件,例如:

if( is_numeric( $searched_employee ) )
  $employee_cond = " AND employee_id=$searched_employee";
else
  $employee_cond = "";

并将$employee_cond放入您的查询中,而不是AND employee_id='$searched_employee'。 重复你需要的每一个条件。

答案 1 :(得分:0)

在日期范围条件周围加上括号:

SELECT * FROM表WHERE(job_date BETWEEN'$ search_date1'和'$ search_date2')AND employee_id ='$ searching_employee'AND team ='$ searching_team'AND acct_number ='$ _ REQUEST [q]'ORDER BY employee_id desc < / p>

答案 2 :(得分:0)

我认为这不是你的BETWEEN声明的问题,因为这是你“和”在一起的标准数量。你要求的是所有标准必须是真的,因为它被包含在集合中......

Ex:您的自/至日期是5月1日至5月31日,但您要查找的$ Searched_Employee在该范围内没有活动,或者该员工与您的Acct_Number没有关联$ searching_team等。

您正在明确地寻找所有这些条件。你可能打算让一些“OR”条件继续下去......比如

select 
       Jobs.*,
       Employees.LastName,
       Employees.FirstName,
       Employees.{whatever other columns}
   from 
      Jobs 
         join Employees on Jobs.EmployeeID = Employees.ID
   where
          Jobs.job_Date between StartDate and StopDate
      AND Jobs.employee_id = SearchedEmployee
      AND Jobs.team = SearchedTeam
      AND Jobs.Acct_Number = SearchedAccount

*仅用于计数()或从查询返回的字段,而不是在where / join条件中(除非是计数())。因此,上面已经修改为保留所有“AND”子句,但也显示从连接表中获取特定或所有字段。

由于您的实际表格不可用,因此会修改查询的表名称。正如你所看到的,我做了Jobs。*来返回该表中的所有字段,但明确地包括了Employees。{某些单独的字段}。

希望这个澄清可以帮助您将来查询...