问题描述
||
我需要在这里做一些事情,而我对此应该如何工作感到困惑。
这是我需要使用的变量:
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员工ID = \'$ searched_employee \'可能是*,因此它应该返回所有记录,并且对团队也是如此。
回显变量以尝试确保已设置某些内容,这给了我:
找不到2011年5月1日至2011年5月31日之间以及团队“团队”中“雇员”的记录。
使用BETWEEN后,是否可以在Select语句中使用AND请求更多?
提前致谢!
-乔尔
解决方法
您不能在WHERE子句中使用\'* \'通配符。
尝试对查询中使用的条件使用变量,例如:
if( is_numeric( $searched_employee ) )
$employee_cond = \" AND employee_id=$searched_employee\";
else
$employee_cond = \"\";
并在查询中放入$employee_cond
而不是AND employee_id=\'$searched_employee\'
。
对您需要的每个条件重复上述步骤。
, 将括号放在日期范围条件周围:
SELECT * FROM table WHERE(job_date在\'$ search_date1 \'和\'$ search_date2 \'之间)AND employee_id = \'$ searched_employee \'AND team = \'$ searched_team \'AND acct_number = \'$ _ REQUEST [q] \'ORDER BY employee_id desc
, 我认为这与您的BETWEEN声明无关,因为这是您“与”在一起的标准数量。您要提供的所有条件都必须是真实的,才能将其包含在集合中...
例如:您的开始/结束日期是5月1日至5月31日,但您要查找的$ Searched_Employee在该范围内没有活动,或者该雇员与您的Acct_Number与$ searched_team等无关。
您正在明确地寻找所有这些条件。您可能打算继续执行某些“或”条件,例如
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
*仅真正用于*,例如count()或用于从查询返回的字段,并且不在where / join条件内使用(除非其为count())。因此,已对上面的内容进行了修改,以保留您的所有“ AND”子句,而且还显示了从联接表中获取特定或所有字段。
由于您的实际表不可用,因此从中查询的表名已被修改。如您所见,我做了Jobs。*来返回该表中的所有字段,但是明确包括了Employees。{certain个别字段}。
希望此澄清有助于您将来的查询...