將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)代碼。為方便查看,我都寫(xiě)在了一個(gè)aspx頁(yè)面中了。
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);