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 和 XML: 使用expat函数(二)
Oct 09 PHP
zend framework配置操作数据库实例分析
Dec 06 PHP
PHPUnit安装及使用示例
Oct 29 PHP
Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 2611816 bytes)
Nov 08 PHP
php定时执行任务设置详解
Feb 06 PHP
MySql数据库查询结果用表格输出PHP代码示例
Mar 20 PHP
PHP实现的简单网络硬盘
Jul 29 PHP
PHP中list()函数用法实例简析
Jan 08 PHP
thinkphp3.2中实现phpexcel导出带生成图片示例
Feb 14 PHP
基于Codeigniter框架实现的student信息系统站点动态发布功能详解
Mar 23 PHP
解决出现SoapFault (looks like we got no XML document)的问题
Jun 24 PHP
PHP实现的AES双向加密解密功能示例【128位】
Sep 03 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下常用正则表达式整理
2010/10/26 PHP
浅析PHP程序防止ddos,dns,集群服务器攻击的解决办法
2013/06/18 PHP
PHP中foreach()用法汇总
2015/07/02 PHP
PHP redis实现超迷你全文检索
2017/03/04 PHP
php调用云片网接口发送短信的实现方法
2017/10/25 PHP
Laravel框架实现即点即改功能的方法分析
2019/10/31 PHP
PHP实现本地图片转base64格式并上传
2020/05/29 PHP
javascript 装载iframe子页面,自适应高度
2009/03/20 Javascript
判断iframe里的页面是否加载完成
2014/06/06 Javascript
JavaScript中Number.MIN_VALUE属性的使用示例
2015/06/04 Javascript
js禁止页面刷新与后退的方法
2015/06/08 Javascript
Bootstrap每天必学之附加导航(Affix)插件
2016/04/25 Javascript
Vue.js每天必学之组件与组件间的通信
2016/09/08 Javascript
js 数字、字符串、布尔值的转换方法(必看)
2017/04/07 Javascript
H5上传本地图片并预览功能
2017/05/08 Javascript
微信小程序实现皮肤功能(夜间模式)
2017/06/18 Javascript
使用JS和canvas实现gif动图的停止和播放代码
2017/09/01 Javascript
微信小程序中setInterval的使用方法
2017/09/29 Javascript
Vue2仿淘宝实现省市区三级联动
2020/04/15 Javascript
layui插件表单验证提交触发提交的例子
2019/09/09 Javascript
node.JS二进制操作模块buffer对象使用方法详解
2020/02/06 Javascript
关于vue-cli3打包代码后白屏的解决方案
2020/09/02 Javascript
用python实现简单EXCEL数据统计的实例
2017/01/24 Python
Python内置模块hashlib、hmac与uuid用法分析
2018/02/12 Python
浅析PEP572: 海象运算符
2019/10/15 Python
django中media媒体路径设置的步骤
2019/11/15 Python
使用Python的datetime库处理时间(RPA流程)
2019/11/24 Python
中外合拍动画首获奥斯卡提名,“上海出品”《飞奔去月球》能否拿下最终大奖?
2021/03/16 国漫
H5 video poster属性设置视频封面的方法
2020/05/25 HTML / CSS
个人能力自我鉴赏
2014/01/25 职场文书
荷叶圆圆教学反思
2014/02/01 职场文书
国贸专业求职信
2014/06/28 职场文书
给校长的一封检讨书
2014/09/20 职场文书
个人职业及收入证明
2014/10/13 职场文书
党员群众路线教育实践活动学习笔记
2014/11/05 职场文书
Vue OpenLayer测距功能的实现
2022/04/20 Vue.js