MySQL和PHP在结果中搜索类似的单词

时间:2017-11-28 22:11:37

标签: php mysql

我有一个搜索框,用户可以在其中输入日期。此输入文本将在数据库中搜索,结果将通过语法检索..

有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中输入,那么它将搜索类似的,我可以得到数据的结果与月或年不适用于类似的输入。

2 个答案:

答案 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";