2012-04-20 188 views
0

我有表格4个字段即(开始月份,开始的一年,结束月,结束一年) 和MySQL表结构是一样的ID,客户编号,金额,月,年MySQL查询匹配月份和年份

现在,我需要显示具有匹配条件的行,在开始月份和年份以及结束月份和年份之间。

我尝试这个查询

select id,customer id,concat(month,'-',year) as d1 from payroll where 
empid='$_POST[emp_id]' and (STR_TO_DATE(d1,'%m-%Y') between 
STR_TO_DATE('$_POST[fmonth]-$_POST[fyear]','%m-%Y') and 
STR_TO_DATE('$_POST[tmonth]-$_POST[tyear]','%m-%Y')) 

请指教....

+1

严,不管你做什么,不要使用像这样的$ _POST。这是SQL注入的开放之门! – mistalee 2012-04-20 08:08:54

+2

这是为什么downvoted?他显然是一个初学者,所以帮助他而不是伤害他。 – aefxx 2012-04-20 08:10:47

+0

这不是一个查询。这看起来像是缩进来创建查询的PHP代码(片段)。请粘贴您的实际查询。 – hakre 2012-04-20 08:14:00

回答

2

假设列yearmonth和4个表单字段是整数,这会工作:

SELECT id 
    , customer id 
    , CONCAT(month, '-', year) AS d1 
FROM payroll 
WHERE empid = '$_POST[emp_id]' 
    AND (year, month) >= ('$_POST[fyear]', '$_POST[fmonth]') 
    AND (year, month) <= ('$_POST[tmonth]', '$_POST[tyear]') 

你应该照顾那些因为安全原因(SQL注入)将它们发送到数据库之前。

(empid, year, month)上的复合索引将有助于提升性能。

+0

谢谢,它工作正常..还要保护SQL注入使用addslashes评论? – 2012-04-20 12:26:46

+0

首先阅读本文:[PHP和准备语句](http://php.net/manual/en/pdo.prepared-statements.php) – 2012-04-20 12:31:42

+0

谢谢大师... – 2012-04-20 12:47:49