2011-05-31 80 views
2

我需要在这里做一些事情,我很困惑这应该如何工作。使用BETWEEN时正确的SQL Select语句

这里有我需要使用的变量:

Date Range 
Employee ID 
Team 

和可能的附加搜索项(acct_number =“$ _ REQUEST [Q]”),如果有人想搜索一个特定的帐号。

每个变量都有一个下拉选择,第一个选项是*表示所有记录。日期是使用日期选择器和日历样式设置的,它会自动设置为日期1 = 7天前和日期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之间以及团队“Team”中没有找到“Employee”的记录。

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

在此先感谢!

--Joel

回答

1

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

尝试使用变量你把你的查询条件,如:

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

,并把$employee_cond您的查询,而不是AND employee_id='$searched_employee'内。 重复您需要的每个条件。

+0

我明白了,这是问题所在。 DRapp是正确的,但不知道我使用的变量可能是请求包含所有记录,除非选择了特定的员工或团队。 – KitKnox 2011-05-31 20:31:05

+0

谢谢大家的帮助! --Joel – KitKnox 2011-05-31 20:31:22

+0

我更改了我的代码,以便检查条件,并且所有内容都按现在的样子工作。再次感谢! --Joel – KitKnox 2011-05-31 20:52:28

0

认沽括号周围的日期范围条件:

SELECT * FROM表WHERE(job_date BETWEEN '$ search_date1' 和 '$ search_date2')AND EMPLOYEE_ID = '$ searched_employee' 和团队='$ searching_team'AND acct_number ='$ _ REQUEST [q]'ORDER BY employee_id desc

+0

谢谢!由于它不返回任何记录,我仍然必须做其他的事情。我会继续关注它。 – KitKnox 2011-05-31 20:05:53

+1

与任何sql怪异一样,开始删除where子句的各个部分,直到您开始获取记录,然后找出为什么您删除的最后一位是错误的。 – 2011-05-31 20:15:43

0

我不认为它是您的BETWEEN语句的问题,因为它是您与“AND”在一起的标准数量。你所要求的是所有的标准必须是真实的,因为它被包括在集合中......

例如:你的日期从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 

*为唯一真正使用诸如计数()或从一个查询中,其中返回的字段和NOT /加入条件(除非其计数())。所以,上面已经修改,以保持你所有的“AND”子句,但也显示从特定或所有字段加入表。

查询来自的表名被修改为实际的表不可用。正如你所看到的,我做了Jobs。*来从该表中返回所有字段,但是明确地包含了雇员。{特定的单个字段}。

希望这个澄清可以帮助您今后查询...

+0

我想尽可能拥有所有的标准,并确保我包含了所有内容,我使用通配符作为标准。请原谅我的无知,我还在学习。 employee_id可以是*而团队可以是*。 employee_id也可以是123456,团队可以是*,对吧?有没有更好的方法一次搜索很多东西? --Joel – KitKnox 2011-05-31 20:19:52

+0

@Joel Stad,修改了我的答案,以帮助澄清你。 – DRapp 2011-05-31 21:53:50

+0

谢谢大家一直很有帮助。 :0) – KitKnox 2011-05-31 23:47:43