|
通常思路是將關(guān)鍵字tag保存到單獨(dú)表中,然后在其他表中根據(jù)一組id進(jìn)行對(duì)多個(gè)關(guān)鍵字進(jìn)行標(biāo)識(shí)。因?yàn)橐粋€(gè)文章可以選擇多個(gè)tag,查詢的時(shí)候頗為麻煩。
所以我在開(kāi)發(fā)中利用了這樣的方法,當(dāng)然不見(jiàn)得多高明 :),分享下經(jīng)驗(yàn)。
將tag直接保存在文章的表中,如Tag字段,tag為“c#”和“.NET”,則Tag字段值為“c#/.NET”就是依/符號(hào)分割tag,這樣數(shù)據(jù)庫(kù)中保存的是字符串了。單文章顯示的時(shí)候可以直接分割成數(shù)組顯示,減少表的關(guān)聯(lián),提高了效率。
當(dāng)需要顯示最近流行詞的時(shí)候。
查詢所有的tag
select tag from 表
利用DataReader把輸出結(jié)果相加起來(lái)。然后根據(jù)分隔符轉(zhuǎn)化為字符串,剩下的就是對(duì)字符串進(jìn)行排序,根據(jù)tag重多少進(jìn)行。并返回重復(fù)的數(shù)量,見(jiàn)代碼。為方便查看,我都寫在了一個(gè)ASPx頁(yè)面中了。
復(fù)制代碼 代碼如下:
<%@ 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>
/// 將字符串根據(jù)分隔符轉(zhuǎn)化為數(shù)組
/// </summary>
/// <param name="sourcestring">要轉(zhuǎn)化的字符串</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>
AspNet技術(shù):[c#]asp.ent下開(kāi)發(fā)中Tag的開(kāi)發(fā)技巧,轉(zhuǎn)載需保留來(lái)源!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。