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数据库代码
Mar 10 PHP
PHP 数组遍历顺序理解
Sep 09 PHP
Search File Contents PHP 搜索目录文本内容的代码
Feb 21 PHP
mysql 查询指定日期时间内sql语句实现原理与代码
Dec 16 PHP
php session劫持和防范的方法
Nov 12 PHP
Opcache导致php-fpm崩溃nginx返回502
Mar 02 PHP
php将字符串转换成16进制的方法
Mar 17 PHP
php简单实现无限分类树形列表的方法
Mar 27 PHP
PHP实现在线阅读PDF文件的方法
Jun 23 PHP
解析 thinkphp 框架中的部分方法
May 07 PHP
Yii2.0使用阿里云OSS的SDK上传图片、下载、删除图片示例
Sep 20 PHP
php操作redis数据库常见方法实例总结
Feb 20 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
动态生成gif格式的图像要注意?
2006/10/09 PHP
PHP MySQL应用中使用XOR运算加密算法分享
2011/08/28 PHP
10个超级有用的PHP代码片段果断收藏
2015/09/23 PHP
Discuz论坛密码与密保加密规则
2016/12/19 PHP
Laravel 实现数据软删除功能
2019/08/21 PHP
js escape,unescape解决中文乱码问题的方法
2010/05/26 Javascript
Javascript 设计模式(二) 闭包
2010/05/26 Javascript
javascript实现复选框选中属性
2015/03/25 Javascript
用JS实现图片轮播效果代码(一)
2016/06/26 Javascript
JQuery遍历元素的后代和同胞实现方法
2016/09/18 Javascript
JS实现运动缓冲效果的封装函数示例
2018/02/18 Javascript
使用Angular CLI进行Build(构建)和Serve详解
2018/03/24 Javascript
关于在vue 中使用百度ueEditor编辑器的方法实例代码
2018/09/14 Javascript
vue框架制作购物车小球动画效果实例代码
2019/09/26 Javascript
Jquery让form表单异步提交代码实现
2019/11/14 jQuery
python遍历数组的方法小结
2015/04/30 Python
基于wxpython开发的简单gui计算器实例
2015/05/30 Python
如何使用七牛Python SDK写一个同步脚本及使用教程
2015/08/23 Python
python控制台中实现进度条功能
2015/11/10 Python
利用Django内置的认证视图实现用户密码重置功能详解
2017/11/24 Python
Python反射用法实例简析
2017/12/22 Python
浅谈python日志的配置文件路径问题
2018/04/28 Python
解决tensorflow测试模型时NotFoundError错误的问题
2018/07/27 Python
Python中GIL的使用详解
2018/10/03 Python
Python中的Socket 与 ScoketServer 通信及遇到问题解决方法
2019/04/01 Python
Python实现搜索算法的实例代码
2020/01/02 Python
python3读取autocad图形文件.py实例
2020/06/05 Python
python遍历路径破解表单的示例
2020/11/21 Python
HTML5和CSS3实例教程总结(推荐)
2016/07/18 HTML / CSS
html5视频媒体标签video的使用方法及完整参数说明详解
2019/09/27 HTML / CSS
全球知名的婚恋交友网站:Match.com
2017/01/05 全球购物
介绍JAVA 中的Collection FrameWork(及如何写自己的数据结构)
2014/10/31 面试题
2014年学生会生活部工作总结
2014/11/07 职场文书
2015年转正工作总结范文
2015/04/02 职场文书
大学生见习总结报告
2015/06/24 职场文书
关于空气污染危害的感想
2015/08/11 职场文书