http://onewww.net/blog/article.asp?id=87

网站开发常用关键字(tag),一般需要获得最多的被采用的Tag,也就是流行词。
通常思路是将关键字tag保存到单独表中,然后在其他表中根据一组id进行对多个关键字进行标识。因为一个文章可以选择多个tag,查询的时候颇为麻烦。
所以我在开发中利用了这样的方法,当然不见得多高明 :),分享下经验。

将tag直接保存在文章的表中,如Tag字段,tag为“c#”和“.net”,则Tag字段值为“c#/.net”就是依/符号分割tag,这样数据库中保存的是字符串了。单文章显示的时候可以直接分割成数组显示,减少表的关联,提高了效率。
当需要显示最近流行词的时候。
查询所有的tag
select tag from 表
利用DataReader把输出结果相加起来。然后根据分隔符转化为字符串,剩下的就是对字符串进行排序,根据tag重多少进行。并返回重复的数量,见代码。为方便查看,我都写在了一个aspx页面中了。

程序代码

<%@ Page Language="C#" %>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="XXXX.BLL" %>
<%@ Import Namespace="XXXX.Model" %>
<%@ Import Namespace="XXXX.DBUtility" %>

<script runat="server">
    
    protected string stext;
    protected void Page_Load(object sender, EventArgs e)
    {
        StringBuilder sb = new StringBuilder();
        using (System.Data.SqlClient.SqlDataReader rd = XXXX.DBUtility.SqlHelper.ExecuteReader(SqlHelper.ConnectionString, System.Data.CommandType.Text, "Select Kinds + '/' FROM XXX", null))
        {
            while (rd.Read())
            {
                sb.Append(rd.GetString(0));
            }
        }
        stext = sb.ToString();

ToArrayBySort(ToArray(stext, '/'));

}

/// <summary>
    /// 将字符串根据分隔符转化为数组
    /// </summary>
    /// <param name="sourcestring">要转化的字符串</param>
    /// <param name="compart">分隔符</param>
    /// <returns></returns>
    public ArrayList ToArray(string sourcestring, char split)
    {
        CharEnumerator ce = sourcestring.GetEnumerator();
        StringBuilder sb = new StringBuilder();
        ArrayList slist = new ArrayList();
        
        while (ce.MoveNext())
        {
            if (ce.Current != split)
            {
                sb.Append(ce.Current);
            }
            else
            {
                if (string.Empty == sb.ToString()) continue;
                slist.Add(sb.ToString());
                sb.Remove(0, sb.ToString().Length);
            }
        }
        return slist;
    }

public class myComparer : IComparer
    {
        int IComparer.Compare(Object x, Object y)
        {
            return ((new CaseInsensitiveComparer()).Compare(((SortItem)y).Count, ((SortItem)x).Count));
        }
    }
    
    public class SortItem
    {
        private string itemname;
        private int count;
        public SortItem()
        {
        }
        public string ItemName
        {
            get { return itemname; }
            set { itemname = value; }
        }
        public int Count
        {
            get { return count; }
            set { count = value; }
        }
    }

public System.Collections.Generic.IList<SortItem> ToArrayBySort(ArrayList slist)
    {
        slist.Sort();
        ArrayList sortList = new ArrayList();
        foreach (object obj in slist)
        {
            SortItem sItem = new SortItem();
            sItem.ItemName = obj.ToString();
            sItem.Count = 1;
            if (sortList.Count == 0) { sortList.Add(sItem); continue; }
            if (obj.ToString() == ((SortItem)sortList[sortList.Count - 1]).ItemName)
            {
                sItem.Count = ((SortItem)sortList[sortList.Count - 1]).Count + 1;
                sortList.RemoveAt(sortList.Count - 1);
            }
            sortList.Add(sItem);
        }
        myComparer myCm = new myComparer();
        sortList.Sort(myCm);

System.Collections.Generic.IList<SortItem> iList = new System.Collections.Generic.List<SortItem>();
        foreach (object obj in sortList)
        {
            iList.Add((SortItem)obj);
            //Response.Write(((SortItem)obj).ItemName + "-" + ((SortItem)obj).Count.ToString() + "<br />");
        }
        return iList;

}
</script>

文章来源:http://wengjinbao.cn/?tid=477

海浪空间 2007-10-18 09:59 发表评论

文章来源:http://www.cnblogs.com/wengjinbao/archive/2007/10/18/928539.html

转载于:https://www.cnblogs.com/xiaozhuoyun/archive/2007/10/19/930838.html

[导入][导入][c#]Web开发中Tag的开发技巧相关推荐

  1. Firebug 调试器开发中的12个技巧

    Firebug 调试器开发中的12个技巧 相信很多从事Web开发工作的开发者都听说和使用过Firebug,但可能大部分人还不知道,其实它是一个在网页设计方面功能相当强大的编辑器,它可以对 HTML.D ...

  2. 开发中避免延时操作技巧详解

    这篇文章主要为大家介绍了开发中避免延时操作技巧详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪 前言 开发中我们或多或少会涉及到一些场景需要使用延时操作,而延时操作其实 ...

  3. iPhone开发中一些使用小技巧

    经过iphone开发,我发现在开发过程中最难的就是一些嘈杂的细节,而了解一些小技巧就会达到事半功倍的效果,下面我就总结一下在iphone开发中的一些小技巧. 1.如果在程序中想对某张图片进行处理的话( ...

  4. 【repost】一探前端开发中的JS调试技巧

    有请提示:文中涉及较多Gif演示动画,移动端请尽量在Wifi环境中阅读 前言:调试技巧,在任何一项技术研发中都可谓是必不可少的技能.掌握各种调试技巧,必定能在工作中起到事半功倍的效果.譬如,快速定位问 ...

  5. @程序员,一文掌握 Web 应用中的图片优化技巧!

    作者 | fecoder 责编 | 郭芮 这篇文章,我们将一起探讨,Web应用中能对图片进行什么样的优化,以及反思一些"负优化"手段. 为什么要对图片进行优化? 对于大多数前端工程 ...

  6. 学习 前端开发中的JS调试技巧(断点)

    http://seejs.me/2016/03/27/jsdebugger/ alert() console.log(xxxx) JS断点调试 JS断点调试,即是在浏览器开发者工具中为JS代码添加断点 ...

  7. 一探前端开发中的JS调试技巧

    转自:http://seejs.me/2016/03/27/%E3%80%90%E5%8E%9F%E5%88%9B%E3%80%91%E4%B8%80%E6%8E%A2%E5%89%8D%E7%AB% ...

  8. c语言使单片机输出低电平,单片机开发中的一些实用技巧

    很多朋友正在学习单片机开发技术,但开发中免不了要碰到这样.那样的问题,有些问题可能无碍大局,但有一些问题却直接影响到产品的成本.体积.性能.这里介绍笔者的几个技巧,希望对大家的工作有帮助. 一.C语言 ...

  9. Django Web 官方 中文文档 开发手册

    django-rest-framework https://yiyibooks.cn/yiyi/django-rest-framework/index.html Django2.0 中文 https: ...

最新文章

  1. 项目管理自动化实践之路
  2. 神经网络与深度学习——TensorFlow2.0实战(笔记)(三)(python运算符和表达式)
  3. Sphinx+MySQL5.1x+SphinxSE+mmseg
  4. 如何迁移outlook邮件到另一个硬盘_如何注册Yahoo邮箱?
  5. react系列之isMounted is an Antipattern
  6. Python是编译运行的
  7. 推荐2款在线Ascii画图工具
  8. python依赖如何打包_python 打包依赖包安装
  9. android黑科技系列——手机端破解神器MT的内购VIP功能破解教程
  10. wifi信号满格无法连接服务器,wifi正常为什么不能上网_一招解决wifi信号满格不能上网的方法...
  11. wifidog认证php,ddwrt+wifidog搭建热点认证系统(无线路由器web认证)
  12. 传统蓝牙BR/EDR的搜索Inquiry
  13. 【Laravel】Laravel-admin后台框架-2创建数据表建立模块增删改查CURD(1)
  14. Leetcode刷题笔记12:【20】有效的括号【155】最小栈【255】用队列实现栈(STL:stackC++ 单引号和双引号)
  15. java彩票机选生成
  16. 入门,前后端实现简单账号密码登录
  17. Docker 容器仓库之搭建私有仓库、hub仓库
  18. 关于计算重叠四边形的面积的算法
  19. Qt实现小球碰撞动画——屏保
  20. Landsat5数据下载中国地区1991年

热门文章

  1. 简单的文件上传功能实现(java)
  2. 017——数组(十七) asort ksort rsort arsort krsort
  3. vim自带的练习教程(vimtutor)
  4. 从Pycharm说起
  5. 一个简单的基于socket的通讯处理程序
  6. Windows Mobile开发资源相关下载收录
  7. git解除与远程分支的关联
  8. linux环境部署ltmj,Linux系统安装与简单配置 图文.docx
  9. kafka 日志相关配置
  10. 修改页面后获得flag_互动征集丨是时候为2021立flag了