单表多字段查询在一些稍微复杂一点的查询中十分有用。本文主要利用MySQL数据库中的concat函数实现单表多字段多关键词查询。并且显示查询结果的表格可根据所选数据表动态生成。

html代码

<!DOCTYPE html>
<html><head><meta charset="UTF-8"><title></title><script src="js/jquery-1.9.1.min.js" type="text/javascript" charset="utf-8"></script><script src="js/jPages.js" type="text/javascript" charset="utf-8"></script><script type="text/javascript">$(function(){//回车提交查询$('#queryBox').keydown(function(e){if(e.keyCode == 13){$("#query").focus();//查询按钮获得焦点$("#query").click();//调用点击提交按钮}});//点击查询按钮$("#query").click(function(){//获取用户选择的数据表和查询关键词var queryType=$("#queryType").val().trim();var queryKeywords=$("#queryKeywords").val().trim();//对查询关系词的内容进行限制,比如只能输入汉字、字母、数字和空格。var reg=/^[ a-zA-Z0-9\u4e00-\u9fa5]+$/;if(reg.test(queryKeywords)==false){$("#queryTip").text("您输入的关键词有部分内容不符合要求,只能输入汉字、字母、数字和空格。");}//如果内容检测通过,开始提交查询else{if(queryType!="" && queryKeywords!=""){$("#queryTip").text("正在为您检索,请稍候……");//使用ajax访问php页面进行查询$.ajax({type:"post",url:"queryInIndex.php",async:true,data:{queryType:$("#queryType").val(),queryKeywords:$("#queryKeywords").val()},dataType:"json",success:function(data){if(data=="no"){$("#queryTip").text("没有找到您要查询的信息。");}else{$("#queryTip").text("为您找到 "+data.length+" 条信息。");//预设结果表格字符名if($("#queryType").val()=="users")fieldsString="邮箱,姓名,英文名,学号,学位类型,导师,手机,房间";else if($("#queryType").val()=="papers")fieldsString="作者,标题,期刊/会议,卷期页,级别,状态";else if($("#queryType").val()=="softwares")fieldsString="作者,标题,登记号,日期";else if($("#queryType").val()=="patents")fieldsString="作者,标题,受理日期,受理号,授权日期,授权号";//调用函数创建表格createTable("queryResultList",data,fieldsString,"queryResultPager");$("#queryKeywords").focus();// 关键词文本框继续获得焦点,以方便用户继续输入内容}}});}else{$("#queryTip").text("请先选择查询类型,并输入关键词,然后点击查询按钮。");$("#queryKeywords").focus();}}})function createTable(tableHolder,data,fieldsString,pagerHolder)//自动创建结果表格的函数/*参数含义:tableHolder:显示结果表格的父元素data:JSON格式的查询结果fieldsString:字段名字符串pagerHolder:显示分页导航的元素* */{fieldsArr=fieldsString.split(",");//对字段名字符串进行分割var columnNum=fieldsArr.length; //获取列数var rowNum=data.length;//获取行数$('#'+tableHolder).html("");//清除现有表格$('#'+tableHolder).append("<table border='1'><thead><tr></tr></thead><tbody></tbody></table>"); //设置表格结构var i=0; //临时循环变量while(i<columnNum) //加载字段值{$('#'+tableHolder+" thead tr").append("<th>"+fieldsArr[i]+"</th>");i++;}i=0;while(i<rowNum)//加载数据{var j=0;$('#'+tableHolder+" tbody").append("<tr>")while(j<columnNum){$('#'+tableHolder+" tbody tr:last").append("<td>"+data[i][j]+"</td>");j++;}$('#'+tableHolder+" tbody").append("</tr>")i++;}//分页导航,这里利用jPages插件$("#"+pagerHolder).jPages({containerID : tableHolder+" tbody", //存放表格的窗口标签IDprevious : "前一页", //指示首页的按钮next : "下一页",//指示尾页的按钮perPage : 10,//每页显示表格的行数delay : 0 //分页时动画持续时间,0表示无动画});//设置结果表格的隔行变色$('#'+tableHolder+" tr:odd").css("background-color","#fff");$('#'+tableHolder+" tr:even").css("background-color","#efefef");}})</script></head>
<body><div id="queryBox" style="text-align: center; padding-top: 10px;padding-bottom: 10px; width: 100%;"><span><select id="queryType" style="height: 30px;"><!--选择数据表的下拉菜单--> <option selected="selected" value="">请选择数据表</option><option value="users">学生信息</option><option value="papers">论文</option><option value="softwares">软著</option><option value="patents">专利</option></select></span><span><input type="text" id='queryKeywords' style="width: 200px; height: 25px;"/><!--输入查询关键词的文本框--> <input type="button" id="query" style="width: 30px; height: 30px; cursor: pointer;" /> <!--提交查询按钮--> </span><div id="queryTip" class="tip">本功能支持以空格为分割标记的多词查询。</div><!--信息提示框--> </div><div id="queryResultList"></div><!--用于显示查询结果--> <div id="queryResultPager" style="text-align: center; margin-top: 10px;"></div><!--结果分页导航的容器-->
</body>
</html>

queryInIndex.php

<?php
include_once("../phpFiles/connMysql.php");//包含连接数据库的代码
$queryType=$_POST['queryType'];//目标数据表
$queryKeywords=$_POST['queryKeywords'];    //查询词$queryKeywords = preg_replace('#\s+#', ' ',$queryKeywords);//将字符串中多个连续空格替换为一个空格
$keywords=explode(" ",$queryKeywords); //查询词按空格分割//根据不同的数据表生成不同的查询语句
if($queryType=="users")
{$sqlsmt="select email,truename,enName,stuid,degree,supervisorname,tel,room from $queryType where "; //查询语句的初始值//利用循环 生成对每个关键词的查询语句foreach ($keywords as $keyword) {$sqlsmt.="concat(email,truename,enName,stuid,degree,supervisorname,tel,room) like '%$keyword%' or ";//本句是关键,利用concat函数实现从多个字段查询单个关键词,并用' or '关键词把每个关键词的concat结果合并}$sqlsmt=substr($sqlsmt,0,strlen($sqlsmt)-3); //去掉查询字符串尾部的' or '$sqlsmt.=" order by degree asc, stuid desc"; //追加排序子句
}
else if($queryType=="papers")
{$sqlsmt="select authors,title,jorc,vap,level,status from $queryType where "; foreach ($keywords as $keyword) {$sqlsmt.="concat(authors,title,jorc,vap,level,status) like '%$keyword%' or ";} $sqlsmt=substr($sqlsmt,0,strlen($sqlsmt)-3);$sqlsmt.=" order by level desc, vap desc";
}
else if($queryType=="softwares")
{$sqlsmt="select authors,title,num,date from $queryType where ";foreach ($keywords as $keyword) {$sqlsmt.="concat(authors,title,num,date) like '%$keyword%' or ";}  $sqlsmt=substr($sqlsmt,0,strlen($sqlsmt)-3);$sqlsmt.=" order by date desc";
}
else if($queryType=="patents")
{$sqlsmt="select authors,title,acceptDate,acceptNum,authorizeDate,authorizeNum from $queryType where ";foreach ($keywords as $keyword) {$sqlsmt.="concat(authors,title,acceptDate,acceptNum,authorizeDate,authorizeNum) like '%$keyword%' or ";}  $sqlsmt=substr($sqlsmt,0,strlen($sqlsmt)-3);$sqlsmt.=" order by acceptDate desc";
}$myrs=mysql_query($sqlsmt);//执行查询
if(mysql_num_rows($myrs)==0)//如果结果为空 返回'no'
{echo(json_encode("no"));
}
else //否则返回json格式的结果
{while($row=mysql_fetch_array($myrs)){$temp[]=$row;}echo(json_encode($temp));}
?>

结果截图

php mysql ajax 单表多字段多关键词查询相关推荐

  1. mysql创建单个字段视图,MySQL在单表上创建视图

    搜索热词 在单表上创建视图 在student表上,创建view_stu视图 首先,创建一个数据库chapter07 图片描述" title=""> 在数据库中,创建 ...

  2. MySQL:单表查询---简单查询+条件查询+高级查询+表和字段取别名

    目录 一.通用模版展示 简单查询 条件查询 高级查询 表和字段取别名 二.举例说明 简单查询 条件查询 高级查询 表和字段取别名 三.注意事项 四.Mapper简单举例 简单查询 条件查询 高级查询 ...

  3. 【MySQL】单表支持并行导出的工具--mydumper

    [MySQL]单表支持并行导出的工具–mydumper 下载和安装: https://github.com/maxbube/mydumper RHEL6.5源码安装mydumper 0.9.5: yu ...

  4. 一文带你了解MySQL之单表访问方法

    前言 对于我们这些MySQL的使用者来说,MySQL其实就是一个软件,平时用的最多的就是查询功能.DBA时不时丢过来一些慢查询语句让优化,我们如果连查询是怎么执行的都不清楚还优化什么,所以是时候掌握真 ...

  5. 【mysql】 数据表修改字段的数据类型

    [mysql] 数据表修改字段的数据类型 1.背景 2.修改字段的数据类型 1.背景 当数据表创建之后,发现数据表字段的数据类型不合适,我们可以立即删除后重新创建: 但是一旦存上大量数据之后,我们更希 ...

  6. 为什么说mysql数据库单表最大两千万?依据是啥?

    为什么说mysql数据库单表最大两千万?依据是啥? 前言 数据库单表行数最大多大 索引的结构 页的结构 从页到索引 B+树承载的记录数量 x怎么算 y的计算 行总数计算 行数超一亿就慢了吗? B树承载 ...

  7. 单表无条件和有条件查询的SQL语句

    话不多说,直接上实验4 简单查询-单表无条件和有条件查询的SQL语句------------ (1) 查询所有学生的基本信息.所有课程的基本信息和所有学生的成绩信息(用三条SQL语句). SELECT ...

  8. MySQL单表多字段模糊查询解决方法

    2019独角兽企业重金招聘Python工程师标准>>> 在最近的一个项目需要实现在单表中对多字段进行多个关键字的模糊查询,但这数个关键字并不一定都存在于某个字段 例如现有table表 ...

  9. mysql 单表多字段查询_单表多字段MySQL模糊查询的实现

    MySQL模糊查询是我们经常会遇到的,下面就为您介绍MySQL模糊查询的实现方法,希望对您学习MySQL模糊查询方面能够有所帮助. 在最近的一个项目需要实现在单表中对多字段进行多个关键字的MySQL模 ...

最新文章

  1. Android逆向之旅---爆破一款资讯类应用「最右」防抓包策略原理分析
  2. Docker安装与镜像,容器命令管理
  3. ie bug(如果不足,留言大家一起分享)
  4. c# 串口SerialPort
  5. Pytorch自定义Dataset和DataLoader去除不存在和空的数据
  6. Atitit.js图表控件总结
  7. 【centOS】centOS安装图形界面
  8. error: ‘CV_BGR2RGB’ was not declared in this scope
  9. 转:min(x,y)高效算法
  10. 【操作系统复习】系统调用
  11. matlab如何导入多文本数据,将文本文件中的混合数据导入表
  12. Ubuntu14.04 install appium
  13. 弹出visual studio 实时调试器解决
  14. win11系统下,迅雷启动后闪退的问题
  15. win10计算机管理不可用,win10管理员被禁用怎么办,win10怎么管理员运行
  16. MATLAB画图---设置坐标轴为固定值(以4厘米为例)
  17. Android获取一周每一天的日期
  18. 时钟服务器工作原理,Windows 时间服务的工作原理
  19. pixel 6手机连接wifi,网络受限
  20. Linux LCD设备驱动详解

热门文章

  1. 网址保存到桌面快捷方式
  2. 【C语言基础】——6个人摇骰子
  3. linux host主机名配置
  4. 干货丨浅谈足式机器人的运动控制
  5. Extended Feature Pyramid Network for Small Object Detection
  6. FreeMaker语法大全及示例
  7. 码住!人工智能怎么影响教育?听这场直播就够了!
  8. 如何去画人物的侧脸眼睛?眼睛该怎么画?
  9. Android——Android app bundle插件化部署
  10. L1-054 福到了 (15分) c++解法