我有一个搜索框,用户可以在其中输入日期。此输入文本将在数据库中搜索,结果将通过语法检索..
有3个搜索框订单名称,订单号和&我只想要日期搜索的日期。
/deep/ .my-sidenav {
.mat-expansion-panel-body {
margin: 0;
}
}
在datebase任何订单日期值如此2017-08-24 01:08:27 所以当我在框中输入相同的输入2017-08-24 01:08:27然后它的工作。我想如果在搜索框2017或2017-08中输入,那么它将搜索类似的,我可以得到数据的结果与月或年不适用于类似的输入。
答案 0 :(得分:0)
DATETIME范围的规范性标准
匹配“2008”或“2008-”将是
WHERE 1=1
AND t.odate >= '2008-01-01'
AND t.odate < '2008-01-01' + INTERVAL 1 YEAR
匹配“2008-03”
WHERE 1=1
AND t.odate >= '2008-03-01'
AND t.odate < '2008-03-01' + INTERVAL 1 MONTH
匹配“2008-04-14”
WHERE 1=1
AND t.odate >= '2008-04-14'
AND t.odate < '2008-04-14' + INTERVAL 1 DAY
通过这些表格,MySQL可以在适当的索引上有效地使用范围扫描。
如果我们想要缓慢的性能,我们可以强制MySQL评估表中每个行的函数,并使用这样的浅调光查询进行字符串比较:
WHERE 1=1
AND DATE_FORMAT(t.odate,'%Y-%-m-%d %T') LIKE CONCAT( '2008' ,'%')
或
WHERE 1=1
AND DATE_FORMAT(t.odate,'%Y-%-m-%d %T') LIKE CONCAT( '2008-04-14' ,'%')
(假设odate
被定义为DATETIME数据类型,而不是字符类型。)
PHP mysql_
接口函数已弃用(暂时不用),最后在最新版本的PHP中删除。
新开发应使用mysqli_
或PDO
。
另外,似乎有很多重复的代码。似乎查询始终以相同的方式开始; WHERE
子句和ORDER BY
子句的条件发生了哪些变化。
$SQL = "SELECT t.* FROM orders t WHERE 1=1" ;
if( somecond ) {
$SQL .= " AND t.designname = ?";
}
if( someothercond ) {
$SQL .= " AND t.orderNo LIKE CONCAT('%', ? ,'%')";
}
if ( somethingelse ) {
$SQL .= " ORDER BY t.orderNum DESC";
}
else {
$SQL .= " ORDER BY t.sNo DESC";
}
// for debugging, display the generated SQL
//var_dump($SQL);
$sth = $dbh->prepare($SQL);
if ( somecond ) {
$sth->bindValue($dname);
}
if ( someothercond ) {
$sth->bindValue($qNumber);
}
答案 1 :(得分:0)
您应该使用mysql函数year()
和month()
,因此您的日期搜索查询应如下所示:
$SQL = "SELECT * FROM orders WHERE (year(oDate ) = year('".$qDate."')
OR (year(oDate ) = year('".$qDate."') AND month(oDate ) = month('".$qDate."')) )
AND orderType='Order' ORDER BY orderNum DESC";