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 '%功效%' ) 

    目的达到!

  • 相关阅读:
    你的服务器和网站为什么会被反复入侵
    MAC 查看当前安装的JDK位置
    Jmeter高并发测试
    解密AndroidManifest.xml、AXMLPrinter2.jar源码下载
    Win10家庭版如何启用本地组策略
    SQLFlow使用中的注意事项--设置篇
    Sqlflow 之隐私政策(Privacy plolicy)介绍
    血缘关系分析工具SQLFLOW--实践指南
    Oracle SQL 性能优化利器
    SQLFlow数据流分析工具的job功能介绍
  • 原文地址:https://www.cnblogs.com/e0yu/p/9096115.html
Copyright © 2011-2022 走看看