文章标签设计方法,文章Tags数据库设计方法举例
文章标签设计方法,文章Tags数据库设计方法举例
下面我们以wordpress和sablog为例,说说wordpress和sablog在tag数据库结构设计和程序方面的差别,希望大家能从中学习文章标签设计方法。
sablog的sablog_articles表
`keywords` varchar(120) NOT NULL default ”,
keywords字段: 以 “,” 分隔所有这篇文章使用到的tag
sablog的sablog_tags表
1 2 3 4 5 6 7 8 |
CREATE TABLE IF NOT EXISTS `sablog_tags` ( `tagid` int(11) unsigned NOT NULL auto_increment, `tag` varchar(100) NOT NULL default '', `usenum` int(11) NOT NULL default '0', `aids` text NOT NULL, PRIMARY KEY (`tagid`), KEY `usenum` (`usenum`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 ; |
tag字段: 存放tag名称
usenum字段: 存放使用这个tag的文章总数
aids字段: 以 “,” 分隔所有使用这个tag的文章id
显示文章tag的时候,是这么写的
1 2 3 4 5 6 7 8 |
$tagdb = explode(',', $article['keywords']); $articletags = $tmark = ''; for($i=0; $i<count($tagdb); $i++) { $tagdb[$i] = trim($tagdb[$i]); $articletags .= $tmark.'<a href="./?action=tags&item='.urlencode($tagdb[$i]).'">'.htmlspecialchars($tagdb[$i]).'</a>'; $tmark = ', '; } $article['tags'] = $articletags; |
取出sablog_articles表keywords字段,explode后生成链接
显示相关文章的程序部份
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
$tags = $comma = ''; for($i=0; $i<count($tagdb); $i++) { $tags .= $comma."'".addslashes($tagdb[$i])."'"; $comma = ','; } $query = $DB->query("SELECT aids FROM {$db_prefix}tags WHERE tag IN ($tags)"); $relaids = 0; while ($tag = $DB->fetch_array($query)) { $relaids .= ','.$tag['aids']; } $relids = explode(',', $relaids); // 清除重复值的单元并删除当前ID $relids = array_unique($relids); $relids = array_flip($relids); unset($relids[$articleid]); $relids = array_flip($relids); $related_tatol = count($relids); $relids = implode(',',$relids); if ($related_tatol > 1 && $relids != $articleid) { $order = in_array($options['related_order'], array('dateline', 'views', 'comments')) ? $options['related_order'] : 'dateline'; $query = $DB->query("SELECT articleid,title,views,comments FROM {$db_prefix}articles WHERE visible='1' AND articleid IN ($relids) ORDER BY ".$order." DESC LIMIT ".intval($options['related_shownum'])); $titledb=array(); while ($title = $DB->fetch_array($query)) { $title['title'] = trimmed_title($title['title'], $options['related_title_limit']); $titledb[] = $title; } unset($title); $DB->free_result($query); } |
取出sablog_articles表keywords字段,生成取得aids的查询条件$query = $DB->query(“SELECT aids FROM {$db_prefix}tags WHERE tag IN (‘tag1′,’tag2′,’tag3′)”);
从而得到所有包含tag1,tag2,tag3的文章id, 注意aids字段的内容,上面我已经说明了aids字段: 以 “,” 分隔所有使用这个tag的文章id
wordpress则用到了4张表wp_posts, wp_terms, wp_term_relationships, wp_term_taxonomy
wordpress在新版里,数据库结构有了调整,结构和名称与以前的不一样,category和tag合并了,区别在wp_term_taxonomy里taxonomy字段
category则taxonomy字段内容为category
tag则taxonomy字段内容为post_tag
wp_posts里不存放任何tag数据
wp_terms表用于存放tag和category,结构如下
1 2 3 4 5 6 7 8 |
CREATE TABLE IF NOT EXISTS `wp_terms` ( `term_id` bigint(20) NOT NULL auto_increment, `name` varchar(55) NOT NULL default '', `slug` varchar(200) NOT NULL default '', `term_group` bigint(10) NOT NULL default '0', PRIMARY KEY (`term_id`), UNIQUE KEY `slug` (`slug`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; |
`wp_terms`里的 term_id 和 `wp_term_taxonomy` 里的 term_id 关联
`wp_posts`里的 ID 和 wp_term_relationships 里的 object_id 关联
`wp_term_relationships`里的 term_taxonomy_id 和 `wp_terms` 里的 term_id 关联
先说到这吧,具体的去看数据库,熟练的程序员,由数据库结构,就能知道程序是怎么写的了
wordpress的tag数据库结构要清晰条理得多,sablog的tag数据库结构就不太利于维护,但对于2者在显示方面的性能,我还没有做测试。
自由转载,转载请注明: 转载自WEB开发笔记 www.chhua.com
文章标签设计方法,文章Tags数据库设计方法举例相关推荐
- IDEF1x语义建模方法及其在数据库设计中的应用
IDEF1x语义建模方法及其在数据库设计中的应用 李俊平 (深圳职业技术学院计算机软件工程系 广东深圳 518055) 摘要:IDEF1x是在E-R方法中引入语义的一种数据库概念建模方法,对E-R方法 ...
- (数据库系统概论|王珊)第七章数据库设计-第一节:数据库设计概述
注意:此部分内容和软件工程的知识点重合较多,更多请点击[免费分享]软件工程核心知识点 本章较分散,各节导航如下 (数据库系统概论|王珊)第七章数据库设计-第二节:需求分析 (数据库系统概论|王珊)第七 ...
- 【学习记录】第一章 数据库设计-《SQL Server数据库设计和开发基础篇视频课程》...
一.课程笔记 1.1 软件开发周期 (1)需求分析阶段 分析客户的业务和数据处理需求. (2)概要设计阶段 设计数据库的E-R模型图,确认需求信息的正确和完整. /* E-R图:实体-关系图(Ent ...
- 数据库设计的步骤(数据库设计概述)
数据库设计概述 数据库设计是指对于一个给定的应用环境,设计一个优良的数据库逻辑模式和物理结构,并据此建立数据库及其应用系统,使之能够有效地存储和管理数据,满足各种用户的应用需求,包括信息管理要求和数据 ...
- 餐饮管理系统 mysql数据库设计分析_终稿课程设计_餐饮管理系统数据库设计.docOK版(样例3)...
<课程设计_餐饮管理系统数据库设计.doc>由会员分享,可免费在线阅读全文,更多与<(终稿)课程设计_餐饮管理系统数据库设计.doc(OK版)>相关文档资源请在帮帮文库(www ...
- 面向对象方法中的数据库设计
转自:http://blog.csdn.net/coffeewoo/article/details/5291582 在面向对象中,是没有数据流这一说法的.业务的完成是由对象及消息来完成的,只有&quo ...
- 数据库设计方法与规范 数据库设计过程
数据库技术是信息资源管理最有效的手段.数据库设计是指对于一个给定的应用环境,构造最优的数据库模式,建立数据库及其应用系统,有效存储数据,满足用户信息要求和处理要求. 数据库设计中需求分析阶段综合各个用 ...
- mysql数据库设计的原则_MySQL数据库设计原则
转自 http://www.supidea.com/post/mysql_design_database.aspx MySQL数据库设计原则 MySQL对于成为一个非常快速的数据库服务器有着当之无愧的 ...
- 数据库设计(二)——数据库设计原则
一.数据库表的设计原则 1.不应该针对整个系统进行数据库设计,而应该根据系统架构中的组件划分,针对每个组件所处理的业务进行组件单元的数据库设计:不同组件间所对应的数据库表之间的关联应尽可能减少,如果不 ...
- 数据库设计五要点 让数据库设计更加规范
通常情况下,可以从两个方面来判断数据库是否设计的比较规范.一是看看是否拥有大量的窄表,二是宽表的数量是否足够的少.若符合这两个条件,则可以说明这个数据库的规范化水平还是比较高的.当然这是两个泛泛而谈的 ...
最新文章
- java 正則_Java正則表達式入门
- go语言goroutine的取消
- 开源会议系统openmeetings安装
- 强大的独立日期选择器(date picker)插件 - Kalendae
- echarts formatter_牛X!用 Echarts 打造一个轮播图!
- Web Hacking 101 中文版 十、跨站脚本攻击(一)
- MAC下Android的Eclipse开发环境的搭建 转自MacroCheng
- 《Android面试宝典》学习笔记(第三章:组件)
- mathematica 如何在数组中等间隔插入元素
- 微博java版_新浪微博JAVA通用版
- Visio 2019/2016中文版零基础入门视频教程
- [设计]2019年全国电子设计竞赛A题-电动小车动态无线充电系统
- 游戏HTML翻翻乐,大班益智游戏翻翻乐优秀教案
- 【华人学者风采】Ting Xu 加州大学伯克利分校
- axure sketch 对比_Sketch to Axure RP插件下载
- 通用计算机与嵌入式的比较,嵌入式系统与通用计算机系统相比有什么特点?如题 谢谢了...
- 纯web端实现条形码识别
- SQL Server安全(2/11):身份验证(Authentication)
- 无需外源库Python小游戏
- 零起点魔兽争霸3UI布局编辑器 预览版
热门文章
- Oracle12C 基本操作和使用
- 【C#】委托,方法回调,匿名函数,拉姆达表达式
- HFSS 3D LAYOUT TDR仿真
- 考研数学笔记(更新中)
- linux java调优
- mysql 通达信公式_公式选股--均线黏合(更多公式关注公众号“斯达克逻辑”)...
- 安装Linux启动盘【准备8G以上U盘即可】
- hexo入门学习(四):文章(带图片)
- 电影TS/TC/SCR/R5/BD/HD/HC版本意思收集(转)
- DELL服务器 RAID 配置详解