Php 正确搜索数据
我已经写了一个搜索表数据的代码。我为搜索提供了多列。但当我只搜索单个列时,时间结果是不正确的。 屏幕截图: 查询如下:Php 正确搜索数据,php,sql,Php,Sql,我已经写了一个搜索表数据的代码。我为搜索提供了多列。但当我只搜索单个列时,时间结果是不正确的。 屏幕截图: 查询如下: SELECT * FROM file WHERE letter = "daak" OR department = "" OR officer = "" OR DATE BETWEEN "" AND "" ORDER BY DATE 当我搜索daak时,它显示所有字母 { $condition = 'lette
SELECT
*
FROM
file
WHERE
letter = "daak"
OR department = ""
OR officer = ""
OR DATE BETWEEN "" AND ""
ORDER BY
DATE
当我搜索daak时,它显示所有字母
{
$condition = 'letter ="'.$letter.'" or department = "'.$dept.'" or officer = "'.$officer.'"or date between "'.$fdate.'" and "'.$todate.'" order by date';
$result =$qgen->select('file','*',$condition);
}
我认为您需要在查询中使用STR_to_DATE mysql内置函数:
SELECT
*
FROM
file
WHERE
letter = 'daak'
OR department = ''
OR officer = ''
OR DATE BETWEEN STR_TO_DATE('10/09/2018','%d/%m/%Y')AND STR_TO_DATE('12/09/2018','%d/%m/%Y')
ORDER BY
DATE
在php代码中:
$condition = 'letter ="'.$letter.'" or department = "'.$dept.'" or officer = "'.$officer.'"or date between "STR_TO_DATE('.$fdate.', '%d/%m/%Y')" and "STR_TO_DATE('.$todate.', '%d/%m/%Y')" order by date';
$result =$qgen->select('file','*',$condition);
如果只想获得满足所有条件的行,则使用“and”,而不是“or” “A和B”表示“仅A和B所在的行,不包括任何其他行” “A或B”表示“B所在的所有行以及A所在的所有行” 因此,您的查询应该是
select * from file where letter ="daak" AND department = "" AND officer
= "" AND date between "" and "" order by date
如果您想忽略空的输入字段,那么
{
$condArray = array();
if(trim($letter)) $condArray[] = 'letter = "'.$letter.'"';
if(trim($dept)) $condArray[] = 'department = "'.$dept.'"';
if(trim($officer)) $condArray[] = 'officer = "'.$officer.'"'
if(trim($fdate) or trim($todate)) $condArray[] = 'date between "'.$fdate.'" and "'.$todate.'"';
$condition = implode(' AND ', $condArray).' order by date';
$result =$qgen->select('file','*',$condition);
}
您是否有任何错误或结果本身不正确?如果结果不正确,如果所选日期没有数据,您是否检查了日期。您应该检查并验证每个变量,并且仅在变量具有有效值时添加条件。并使用prepared statement.echo变量$condition确保查询显示正确的值