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 面向对象 PHP5 中的常量
May 05 PHP
用php实现选择排序的解决方法
May 04 PHP
PHP设计模式之调解者模式的深入解析
Jun 13 PHP
解析thinkphp中的导入文件标签
Jun 20 PHP
PHP 实现代码复用的一个方法 traits新特性
Feb 22 PHP
php pthreads多线程的安装与使用
Jan 19 PHP
PHP下载文件的函数实例代码
May 18 PHP
Yii2实现ActiveForm ajax提交
May 26 PHP
PHP编程实现脚本异步执行的方法
Aug 09 PHP
PHP静态延迟绑定和普通静态效率的对比
Oct 20 PHP
PHP各种常见经典算法总结【排序、查找、翻转等】
Aug 05 PHP
Thinkphp5框架中引入Markdown编辑器操作示例
Jun 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 应用程序安全防范技术研究
2009/09/25 PHP
PHP数据过滤的方法
2013/10/30 PHP
PHP获取photoshop写入图片文字信息的方法
2015/03/31 PHP
PHP实现QQ登录的开原理和实现过程
2018/02/04 PHP
JavaScript中SetInterval与setTimeout的用法详解
2015/11/10 Javascript
jquery实现表格隔行换色效果
2015/11/19 Javascript
jQuery validate插件submitHandler提交导致死循环解决方法
2016/01/21 Javascript
Bootstrap开关(switch)控件学习笔记分享
2016/05/30 Javascript
基于jQuery实现弹幕APP
2017/02/10 Javascript
jQuery简单实现遍历单选框的方法
2017/03/06 Javascript
JS与jQuery实现子窗口获取父窗口元素值的方法
2017/04/17 jQuery
bootstrap 设置checkbox部分选中效果
2017/04/20 Javascript
网页中的图片查看器viewjs使用方法
2017/07/11 Javascript
js+html5实现页面可刷新的倒计时效果
2017/07/15 Javascript
JavaScript自执行函数和jQuery扩展方法详解
2017/10/27 jQuery
vue 项目中使用Loading组件的示例代码
2018/08/31 Javascript
JavaScript内置对象math,global功能与用法实例分析
2019/06/10 Javascript
微信小程序如何利用getCurrentPages进行页面传值
2019/07/01 Javascript
Vue 打包体积优化方案小结
2020/05/20 Javascript
vue element ui validate 主动触发错误提示操作
2020/09/21 Javascript
Python类的用法实例浅析
2015/05/27 Python
Python使用gRPC传输协议教程
2018/10/16 Python
Python 保存矩阵为Excel的实现方法
2019/01/28 Python
python代理工具mitmproxy使用指南
2019/07/04 Python
Python使用指定端口进行http请求的例子
2019/07/25 Python
python机器学习包mlxtend的安装和配置详解
2019/08/21 Python
python解析多层json操作示例
2019/12/30 Python
Groupon荷兰官方网站:高达70%的折扣
2019/11/01 全球购物
设计模式的基本要素是什么
2014/04/21 面试题
MYSQL基础面试题
2012/05/13 面试题
J2EE是技术还是平台还是框架
2016/08/14 面试题
房屋买卖协议书
2014/04/10 职场文书
初中班级口号
2014/06/09 职场文书
总经理检讨书范文
2015/02/16 职场文书
2015年医院工作总结范文
2015/04/09 职场文书
pytorch 两个GPU同时训练的解决方案
2021/06/01 Python