zoukankan      html  css  js  c++  java
  • thinkphp---模糊查询详解

    最近做项目,在做搜索模块的时候,模糊查询肯定少不了。

    今天就详细的看一下模糊查询:

    $where['title'] = array('like','%'.$words.'%');
    $where['title'] = array('like',array('%'.$words.'%','%'.$wordss.'%'));
    $where['title'] = array(array('like','%'.$words.'%'),array('like','%'.$wordss.'%'));

    一、当个字段做模糊查询。

    $words = "吃"; 
    $where['title'] = array('like','%'.$words.'%');
    $list = $TagDB->where($where)->select();

    这样执行的Sql是:

    SELECT * FROM `tp_keywords_sanqi` WHERE `title` LIKE '%吃%' 

    这个可以查询多个字段:

    $where['title'] = array('like','%'.$words.'%');
    $where['description'] = array('like','%'.$words.'%');
    $list = $TagDB->where($where)->select();

    上面的坏处:很多时候,我们做的是标题 title的查询,而且查询的时候,要求包含 title 包含两个或者以上的词:

    例如: 

    要求一:查询标题包含 “作用” 或 “怎样”

    $words = "怎样";
    $wordss = "作用";
    $where['title'] = array('like',array('%'.$words.'%','%'.$wordss.'%'));
    $list = $TagDB->where($where)->select();

    执行的Sql是这样的:

    SELECT * FROM `tp_keywords_sanqi` WHERE (`title` LIKE '%怎样%' OR `title` LIKE '%作用%') 

    要求二:查询标题中同时包含 “作用” 和 ”怎样“ ;

    $words = "怎样";
    $wordss = "作用";
    $where['title'] = array(array('like','%'.$words.'%'),array('like','%'.$wordss.'%'));
    $list = $TagDB->where($where)->select();

    执行的sql是这样的:

    SELECT * FROM `tp_keywords_sanqi` WHERE ( `title` LIKE '%怎样%' AND `title` LIKE '%作用%' ) 

    当然啦!还可以自己写Sql来执行:

    $sql = "SELECT * FROM `tp_keywords_sanqi` WHERE `title` LIKE '%什么%';";
    $sql = "SELECT * FROM `tp_keywords_sanqi` WHERE (`title` LIKE '%什么%') OR (`title` LIKE '%吃%');";
    $sql = "SELECT * FROM `tp_keywords_sanqi` WHERE (`title` LIKE '%什么%' AND `title` LIKE '%作用%')";
    $list = M()->query($sql);

     具体示例:

    $words = "作用 功效";
    $where = array();
    $wordsArr = explode(' ',$words);
    $whereArr = array();
    foreach($wordsArr as $k=>$v){
        $arr = array();
        if(!$v)unset($wordsArr[$k]); 
        array_push($arr,'like');
        array_push($arr,'%'.$v.'%');
        array_push($whereArr,$arr);
    }
    $where['title'] = $whereArr;
    $list = $TagDB->where($where)->select();
    echo $TagDB->getLastSql();

    执行的Sql:

    SELECT * FROM `tp_keywords_sanqi` WHERE ( `title` LIKE '%作用%' AND `title` LIKE '%功效%' ) 

    目的达到!

  • 相关阅读:
    sqlserver 脚本生成数据库文档
    在命令行中执行kms命令激活Microsoft Office 2010
    .NET Core项目修改project.json来引用其他目录下的源码等文件的办法 & 解决多框架时 project.json 与 app.config冲突的问题
    asp.net 访问局域网共享文件
    Winform开发框架的重要特性总结
    Winform开发框架之插件化应用框架实现
    Winform开发框架之权限管理系统的改进
    Winform开发框架之统计图表的实现
    在Winform开发框架中实现对数据库的加密支持
    Winform开发框架之通用高级查询模块
  • 原文地址:https://www.cnblogs.com/e0yu/p/9096115.html
Copyright © 2011-2022 走看看