给产品经理及UI的PHP教程丨文章管理系统
【文章摘要】相信大家都在等待功能就是搜索功能,本节课程就来讲讲如何实现多条件搜索,也叫复合查询。这节将学习通过符号“ =”来拼接字符串,通过“ =”我们可以把SQL语句拆分成多个字符串之后进行拼接,把多个查询条件根据不同的情况拼接到SQL语句中来实现我们的需求。
系列推荐
给产品经理及UI的PHP教程(一)
给产品经理及UI的PHP教程丨文章管理系统【1】-创建栏目(1)
给产品经理及UI的PHP教程丨文章管理系统【1】-创建栏目(2)
给产品经理及UI的PHP教程丨文章管理系统【2】-后台界面框架设计
给产品经理及UI的PHP教程丨文章管理系统【3】-栏目列表
给产品经理及UI的PHP教程丨文章管理系统【4】-修改&删除栏目
给产品经理及UI的PHP教程丨文章管理系统【5】-创建文章(关联数据)
给产品经理及UI的PHP教程丨文章管理系统【6】-文章列表(二维数组)
给 产品经理 及UI的PHP教程丨文章管理系统【7】-修改文章(遍历数组)
给产品经理及UI的PHP教程丨文章管理系统【8】-简易分页
给产品经理及UI的PHP教程丨文章管理系统【9】-你的需求说清楚了吗?
给产品经理及UI的PHP教程丨文章管理系统【10】-回收站
相信大家都在等待功能就是搜索功能,本节课程就来讲讲如何实现多条件搜索,也叫复合查询。这节将学习通过符号“ =”来拼接字符串,通过“ =”我们可以把SQL语句拆分成多个字符串之后进行拼接,把多个查询条件根据不同的情况拼接到SQL语句中来实现我们的需求。
首先我们先普及一下什么是字符串的拼接。
查看如下代码:
运行以上代码的结果是输出了文字ab,不难理解就是把符号“.=”后面的字符串拼接到了原变量值的后面。
之前我们已经学会了如何通过表单提交参数,以及如何在SQL语句里加入条件。复合查询的原理也是离不开这两个知识点。相信这时候大家已经想到了如何实现了。
就是先建立一个form表单,把我们需要查询的参数值传递上去,在通过“.=”符号来拼接多个条件到SQL语句,在把查询结果返回到我们的列表页。是的,就这么简单!
好了我们第一步就先创建一个form表单吧。
打开article_list.php页面,在hr和table中间加入如下代码:
这样就把一个根据栏目查询文章的表单创建好了,之前因为已经把栏目数据保存成了二维数组,所以在这里也很方便的就可以调出来了。这次我采用了get方法,没有采用post方法,目的是为了后面方便结合到分页功能中去。当然POST方法也可以实现。
接下来我们打开article.php页面找到如下代码:
这是我们文章列表的查询代码,我们把括号内的SQL语句部分单独保存到一个变量里,再拆成两部分通过“.=”拼接起来。代码改成如下:
注意:ORDER BY前面要有个空格。
去运行一下我们的文章列表看看,依然是可以正常运行的!
接下来我们就把通过表单传递上去的参数,拼接到SQL语句的条件里去吧。
在$sql=和$sql.=之间增加如下代码:
保存好之后去试试我们的查询功能吧!这下就可以根据栏目查询文章了。先不要管分页哈~~
这时候我们会碰到一个问题,如果查询了指定栏目之后我想再查询所有栏目怎么办?
OK,回到article_list.php页面在下拉选项SELECT的OPTION项前面增加一个自定义的OPTION项:
这里的value值我用了0,这是因为我们的cat_id是个自增字段且从1开始的,所以永远不会出现0的情况。
再到article.php页面把代码改成如下:
可以看出在条件语句中增加了 && $_GET[cat_id]!=0,也就是说要同时满足cat_id存在且不等于0的两种情况才会执行。
这样就算是把根据栏目查询文章的功能做好了,接下来我们再把文章标题的查询结合进去。
打开article_list.php页面,在form表单中增加如下代码:
代码中placeholder是文本框的提示文字,不过不支持低版本的浏览器,要慎用!
再到article.php中增加如下代码:
通过SQL语句中的LIKE操作符可以查询包含指定关键词的数据,%是个通配符,%a%代表着关键词a的前后可以有任意字符,或者没有字符也可以。如果是%a就必须得是以a结束,a%就代表着必须以a开头。
这样就完成了一个基本的复合查询功能。无论有多少个查询条件都可以通过以上形式来完成!
留个作业:
1. FIX分页的BUG。
提示:拆分SELECT COUNT(id) FROM article部分的SQL语句,加入我们的查询条件,获得正确的数量。再到article_list.php的分页代码部分在a标签链接里增加$_GET[参数]。
2. 尝试完成根据发布时间查询文章的功能。
提示:表单中插入两个文本框,一个是开始时间,一个是结束时间。在SQL条件中发布时间要大于等于开始时间,要小于等于结束时间。