php标签云制作——数据表的结构和查询方法

1.数据表的结构:

创建建两张数据表,结构如下:

标签tag表:

文章mood表:

其中mood表中的tag字段,以tag表的id字段+“,”+tag表的id字段,

2.查询方法:

例如:如果需要某篇文章中包含tag表中的id为1,2,3的tagname,也就是id为1,2,3的标签,

则在添加文章的时候用

$result=implode(",", $_POST[‘tagid‘]);//把获取的checkbox的数组用逗号进行分割
$_POST[‘tagid‘]为获取前台的复选框的数组,前台html部分代码为:
<input type="checkbox" name="tagid[]" value="{$tag.id}" id="{$tag.id}"><label for="{$tag.id}">{$tag.tagname}</label>//这里是thinkphp的写法,原生的写法大同小异

这样存储文章的时候,只需要mood表中的tag=$result即可。

数据已经存好了,接下来我们需要实现的是,点击相应的标签查询出所有包含该标签的文章。

如果我们需要显示某篇文章所包含的所有标签,我们要先获取该片文章的id,查询出该篇文章的tag,

用分割函数

$taglist = explode(‘,‘,$source); //$source为文章的tag值,例如:把tag=“1,2,3”分割为一个数组

然后在前台可以这样写:

for($index=0;$index<count($taglist);$index++){
            $tagsa=$tagdata->where(‘id=%d‘,$taglist[$index])->select();
            echo "<a id=‘tag‘ href=‘location/tag/".$tagsa[0][‘id‘]."‘>".($tagsa[0][‘tagname‘])."</a>&nbsp&nbsp&nbsp" ;
              }

循环输出tagname,url传tag表的id值,接下来只需要在接收url值的地方写一个模糊查询的sql,文章表的tag like %id%。

注:以上的查询语句都是thinkphp的语法。

这样用模糊查询会出现一个问题,因为例如:文章表的其中一个tag字段可能包含1,5    另一个tag字段可能包含10,23

如果查询tag like %1%的时候会查询出  tag字段为1,5   和   tag字段为10,23   的两篇文章。即使like条件为%1,%或者%,1,%也是不行的。

因此这里我的写法是在前台写php代码,用两个嵌套的for循环来解决,如下:

$map[‘tag‘] = array(‘like‘,‘%‘.tagid.‘%‘);
            //dump($selecttag[$i][‘id‘]);$arr_mood=$mood->where($map)->select();for($a=0;$a<count($arr_mood);$a++){
                $source=$arr_mood[$a][‘tag‘];
                $taglist = explode(‘,‘,$source);

                for($index=0;$index<count($taglist);$index++){ 

                    if(tagid==$taglist[$index]){//当传过来的tagid在文章的tag字段中存在,则输出。
                            dump($arr_mood[$a][‘title‘]);//这里可以用echo输出至前台
                    }

                } 

            }

鉴于博主是php新手,所以代码有粗糙的地方,请见谅了!

如果你更好的方法,不妨告诉我吧`(*∩_∩*)′

时间: 2024-07-30 20:29:03

php标签云制作——数据表的结构和查询方法的相关文章

使用命令行将Excel数据表导入Mysql中的方法小结

从Excel数据表导入MySQL,已经做过好几次了,但每次都会碰到各种问题:invalid utf8 character string, data too long, ...,浪费了不少时间 为了提高效率,是时候指定一个数据导入的SOP了: 1.准备.txt文件 1.1 将要导入的数据(不含表头)从工作表复制.粘贴到一个新建的Excel数据表中(避免污染源数据) 1.2 粘贴时注意:使用右键paste as value选项,过滤掉源数据表中的多余格式(如,字体颜色.粗体等) 1.3 将新建的Ex

以面向对象的思想实现数据表的添加和查询,JDBC代码超详细

以面向对象的思想编写JDBC程序,实现使用java程序向数据表中添加学生信息,并且可以实现给定×××号查询学生信息或给定准考证号查询学生信息. 创建的数据表如下: CREATE TABLE EXAMSTUDENT(FlowID INTEGER,Type INTEGER,IDCard VARCHAR(18),ExamCard VARCHAR(15),StudentName VARCHAR(20),Location VARCHAR(20),Grade INTEGER);1.首先实现通过java程序在

InterviewQuestion_SQLServer_Probl_将数据表year|month|amount查询成year|m1|m2|m3|m4的样式

题目:有个年度统计表,结构如下: 怎么样把这个表,查询成这样一个结果: 这是在面试过程中遇到的一个关于数据库的题,没有一点思路,不知它考查到的知识点是什么,如何下手? 网上搜了一下,有哥们儿说这是典型的"行转列问题",好像用到"交叉表查询",下面看看具体的代码! 文件:SQLQuery1.sql /* 环境:Microsoft SQL Server 2012 工具: Microsoft SQL Server Management Studio 数据库: Interv

数据库、数据表的基本操作及查询数据

数据库的基本操作 创建数据库 CREATE DATABASE database_name database_name为要创建的数据库的名称 删除数据库 DROP DATABASE database_name database_name为要删除的数据库的名称 数据库存储引擎 数据库存储引擎是数据库底层软件组成,数据库管理系统(DBMS)使用数据引擎进行创建.查询.更新和删除数据操作. MySQL的核心就是存储引擎. 存储引擎比较 |功能|MyISAM|Memory|InnoDB|Archive|

mysql开启远程登陆(修改数据表和授权两种方法)

一.确认防火墙没有阻止3306端口(一般服务器默认会屏蔽掉) windows防火墙例外设置方法 控制面板(右上角选择查看方式为大图标)---防火墙---高级设置---高级设置---出站规则---最右边 新建规则"新建出站规则向导",在向导的第一步,选择要创建的防火墙规则类型,选择第二个"端口". windows防火墙添加端口方法 windows的防火墙做了比较大升级 设置已经分为入站和出站.控制面板\所有控制面板项\Windows 防火墙 进入 入站规则设置第一步

MS SQL Server数据库两个库之间相同数据表名内容批量对比方法

上一篇"导出记录数量对比-软件测试方法(一)",主要介绍数据导出结果记录数量和原始正常好库的记录数量精确对比,测试软件导出少数据的相关bug.本文测试方法旨在更精确比对表记录内部数据差异,记录数量的对比只是恢复准确率的必要条件,而记录内部的字段数据内容是否一致,才是比较的终极目标. 一. 测试目的:在很多情况下,数据导出是以记录数量来衡量是否齐全.在某些情况下,数据记录数量导出是一致的,但,记录内部数据却出现差异,比如某些数字字段,一旦出现差异,其结果将带来不准确.本测试大纲目的是比对

使用Form标签库制作登录表单

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@ taglib uri="http://www.springframework.org/tags/form" prefix="form"%> <% String path = request.getContextPath(); Stri

查看数据表详细结构语句

SHOW  CREATE  TABLE 不仅可以查看表创建时的详细语句,还可以查看存储引擎和字符编码 mysql> SHOW CREATE TABLE tb_emp1 \G  # \G可以使显示结果更加直观*************************** 1. row *************************** Table: tb_emp1Create Table: CREATE TABLE `tb_emp1` ( `id` int(11) DEFAULT NULL, `nam

获取数据表的结构信息

show table status  获取表的信息 例子: show table status from db_name  获取指定数据库中所有表的信息 show table status from db_name like 'uc%'  获取所有以UC开头的额数据表的信息 在thinkPHP中的使用的例子: $db = Db::getInstance(); $list = $Db->query('show table status');