PHP+Mysql实现多关键字与多字段生成SQL语句的函数


Posted in PHP onNovember 05, 2014

本文实例讲述了PHP+Mysql实现多关键字与多字段生成SQL语句的函数的方法。分享给大家供大家参考。具体实现方法如下:

先看实例:

$keyword="1 2 3";

echo $sql=search($keyword,"enter_gongyin_pic","a+b+c"); //函数生成,没有LIMIT,没有ORDER BY

生成:
SELECT * FROM `enter_gongyin_pic` WHERE `a` LIKE '%1%' OR `a` LIKE '%2%' OR `a` LIKE '%3%' OR `b` LIKE '%1%' OR `b` LIKE '%2%' OR `b` LIKE '%3%' OR `c` LIKE '%1%' OR `c` LIKE '%2%' OR `c` LIKE '%3%'

$keyword由POST或者GET获得.按空格分开 可以多字段去查找.

实现函数如下:

function search($keyword,$table,$field)  

{  

//========================================================  

  

//形参说明:  

//keyword为关键字,如“北京首都 方向 火车”。带有空格或者不带  

//table为表名,如enter_gongyin_pic。  

//field为字段组合,如查找一个字段就写好 name   

//如查找两个以上就用 name+picdir  

//========================================================  

//首先确定field  

$new_field=explode("+",$field); //按+剥离  

$field_count=count($new_field); //得到的结果数量  

  

  

$newstring=explode(" ",$keyword); //按空格剥离  

$newstring2=array();  

   //把字符串去掉没有用的空格叔祖元素  

   $i=0;  

   foreach ($newstring as $key => $value) {  

   if($value!="")  

   {  

   $newstring2[$i]=$value;  

   $i++;  

   }  

   }  

//把字符串去掉没有用的空格叔祖元素,  

          

$result_count=count($newstring2); //得到的结果数量  

  

//下面生成SQL语句  

  

  

//********************** if($field_count==1) //找1个字段 START ****************************  

if($field_count==1) //找1个字段  

{  

if($result_count==1) //判断如果是一个关键段  

   {  

   $newstring_search=$newstring2[0];  

$sql="SELECT *   

FROM `$table`   

WHERE `".$new_field[0]."` LIKE '%$newstring_search%'";  

   }  

       

   if($result_count>1) //判断如果是多个关键段  

   {  

  

$sql="SELECT *   

FROM `$table`   

WHERE ";  

$sql_add="";  

foreach ($newstring2 as $key => $value)  

{  

  if($key==0)  

   {  

   $sql_add=$sql_add."`".$new_field[0]."` LIKE '%".$value."%'";  

   }  

   else  

   {  

   $sql_add=$sql_add." OR `".$new_field[0]."` LIKE '%".$value."%'";  

      

        }  

          

          }  

    

$sql=$sql.$sql_add;  

}  

  

}  

  

//********************** if($field_count==1) //找1个字段 END ****************************  

  

  

//********************** if($field_count>1) //找多个字段 START ****************************  

if($field_count>1) //找多个字段,这个时候$new_field是一个数组。拥有多个字段  

{  

if($result_count==1) //判断如果是一个关键段  

{  

        $newstring_search=$newstring2[0]; //$newstring_search是关键字  

        $sql="SELECT *   

        FROM `$table`   

        WHERE ";  

        $sql_add="";//新增加字段  

        foreach ($new_field as $key => $value)  

        {  

                        if($key==0)  

                        {  

                        $sql_add=$sql_add."`".$value."` LIKE '%".$newstring_search."%'";  

                        }  

                        else  

                        {  

                        $sql_add=$sql_add." OR `".$value."` LIKE '%".$newstring_search."%'";  

                        }  

        }  

        $sql=$sql.$sql_add;  

}  

if($result_count>1) //判断如果是多个关键段(多个关键字)==========================  

{  

$sql="SELECT *   

FROM `$table`   

WHERE ";  

$sql_add="";//新增加字段  

foreach ($new_field as $key => $value)  

{  

  if($key==0) //遇到$new_field[0]时候 例:`a` LIKE '%1%' OR `a` LIKE '%2%' OR `a` LIKE '%3%'  

   { //嵌套foreach  

     foreach ($newstring2 as $key2 => $value2)  

      {  

                  if($key2==0)  

                   {  

                        $sql_add=$sql_add."`".$value."` LIKE '%".$value2."%'";  

                   }  

                   else  

                   {  

                   $sql_add=$sql_add." OR `".$value."` LIKE '%".$value2."%'";  

                   }  

        }  

    //嵌套foreach  

   }  

   else   

   //(如果是多字段的比如查name+picdir表)开始FOREACH连续循环,每次执行ELSE $new_field[1] $new_field[2] $new_field[3]。  

   //对应的值为$value  

  {  

   //嵌套foreach(多字段与多关键字)  

   foreach ($newstring2 as $key2 => $value2)  

      {  

                  if($key2==0)  

                   {  

                        $sql_add=$sql_add." OR `".$value."` LIKE '%".$value2."%'";  

                   }  

                   else  

                   {  

                   $sql_add=$sql_add." OR `".$value."` LIKE '%".$value2."%'";  

                   }  

           }  

   //嵌套foreach  

   }  

          

}//foreach ($new_field as $key => $value)结束  

$sql=$sql.$sql_add;  

}//if($result_count>1)结束  

}//if($field_count>1) 结束  

//********************** if($field_count>1) //找多个字段 END ****************************  

return $sql;  

}

希望本文所述对大家的PHP程序设计有所帮助。

PHP 相关文章推荐
php访问查询mysql数据的三种方法
Oct 09 PHP
PHP中动态显示签名和ip原理
Mar 28 PHP
PHP中如何实现常用邮箱的基本判断
Jan 07 PHP
使用pthreads实现真正的PHP多线程(需PHP5.3以上版本)
May 05 PHP
PHP实现模仿socket请求返回页面的方法
Nov 04 PHP
PHPStrom中实用的功能和快捷键大全
Sep 23 PHP
全面解读PHP的Yii框架中的日志功能
Mar 17 PHP
Thinkphp批量更新数据的方法汇总
Jun 29 PHP
Yii2.0预定义的别名功能小结
Jul 04 PHP
php 魔术常量详解及实例代码
Dec 04 PHP
浅谈php的TS和NTS的区别
Mar 13 PHP
php 获取音视频时长,PHP 利用getid3 获取音频文件时长等数据
Apr 01 PHP
ThinkPHP水印功能实现修复PNG透明水印并增加JPEG图片质量可调整
Nov 05 #PHP
phpnow php探针环境检测代码
Nov 04 #PHP
Thinkphp中volist标签mod控制一定记录的换行BUG解决方法
Nov 04 #PHP
ThinkPHP入库出现两次反斜线转义及数据库类转义的解决方法
Nov 04 #PHP
PHP读取CURL模拟登录时生成Cookie文件的方法
Nov 04 #PHP
PHP自动重命名文件实现方法
Nov 04 #PHP
php以post形式发送xml的方法
Nov 04 #PHP
You might like
PHP加密解密类实例分析
2015/04/20 PHP
PHP实现多文件上传的方法
2015/07/08 PHP
PHP filesize函数用法浅析
2019/02/15 PHP
php+mysql开发中的经验与常识小结
2019/03/25 PHP
EasyUI的treegrid组件动态加载数据问题的解决办法
2011/12/11 Javascript
javascript学习笔记(十一) 正则表达式介绍
2012/06/20 Javascript
nodejs的require模块(文件模块/核心模块)及路径介绍
2013/01/14 NodeJs
node.js中的buffer.Buffer.isBuffer方法使用说明
2014/12/14 Javascript
Js为表单动态添加节点内容的方法
2015/02/10 Javascript
轻松5句话解决JavaScript的作用域
2016/07/15 Javascript
Bootstrap 网格系统布局详解
2017/03/19 Javascript
详解使用vue-cli脚手架初始化Vue项目下的项目结构
2018/03/08 Javascript
vue axios请求超时的正确处理方法
2018/04/02 Javascript
详解vue中移动端自适应方案
2019/05/05 Javascript
使用Webpack提升Vue.js应用程序的4种方法(翻译)
2019/10/09 Javascript
[01:06:07]2014 DOTA2国际邀请赛中国区预选赛5.21 DT VS CIS
2014/05/22 DOTA
python中list循环语句用法实例
2014/11/10 Python
python开发之文件操作用法实例
2015/11/13 Python
Android模拟器无法启动,报错:Cannot set up guest memory ‘android_arm’ Invalid argument的解决方法
2016/07/01 Python
详解使用pymysql在python中对mysql的增删改查操作(综合)
2017/01/18 Python
Scrapy的简单使用教程
2017/10/24 Python
python 列表,数组,矩阵两两转换tolist()的实例
2018/04/04 Python
Python txt文件加入字典并查询的方法
2019/01/15 Python
python 读取数据库并绘图的实例
2019/12/03 Python
Python 爬取必应壁纸的实例讲解
2020/02/24 Python
浅谈Python中文件夹和python package包的区别
2020/06/01 Python
PyCharm Community安装与配置的详细教程
2020/11/24 Python
python中最小二乘法详细讲解
2021/02/19 Python
css3制作动态进度条以及附加jQuery百分比数字显示
2012/12/13 HTML / CSS
用HTML5制作视频拼图的教程
2015/05/13 HTML / CSS
萨克斯第五大道精品百货店: Saks Fifth Avenue
2017/04/28 全球购物
英国女性运动服品牌:Sweaty Betty
2018/11/08 全球购物
JD Sports西班牙:英国领先的运动服装公司
2020/01/06 全球购物
职业生涯规划书基本格式
2014/01/06 职场文书
事业单位鉴定材料
2014/05/25 职场文书
关于童年的读书笔记
2015/06/26 职场文书