我打算做这样一个功能,很多网站都有的。 比如:我查看了一个具体的产品信息。在它的旁边出现: 跟它类型相似的产品列表;
跟它价格相似的产品列表;
……
请高手能告诉我一个基本思路(包括数据库设计方面),有具体的方法会更好。参与有份,不停地顶,不得到满意答案誓不罢休!呵呵。。
跟它价格相似的产品列表;
……
请高手能告诉我一个基本思路(包括数据库设计方面),有具体的方法会更好。参与有份,不停地顶,不得到满意答案誓不罢休!呵呵。。
解决方案 »
- PrintDocument打印问题
- 求 delete SQL ?
- 存储过程传递参数出错?
- 关于微软web树(treeview)的问题,请教高手
- Web动态TabPage[求助高手]
- 求助VS2008TeamSuite90DayTrialCHSX1429243.iso
- How to use RequestSoapContext.Security.SerializeXml(SoapEnvelope document)?
- 请问一个关于 freetextbox 的问题?
- 如何正确显示RadioButtonList控件的内容
- 请教客户端打印问题,很典型的一个基本问题,技术爱好者千万不要错过
- 急急急!!!在线等,关于多数据源绑定问题!!
- 如何在配置文件中设定错误页面路径
namespace CookieDataInfo
{
using System;
using System.Web;
using System.Collections;
/// <summary>
/// 数据结构类型
/// </summary>
public class DataInfo
{
private string m_ViewPic;
private string m_ATID;
private string m_CountryID;
private string m_ATName;
private DateTime m_ViewTime;
/// <summary>
/// 构造函数
/// </summary>
/// <param name="ViewPic">预浏图片名称</param>
/// <param name="ATID">景点id</param>
/// <param name="CountryID">国家id</param>
/// <param name="ATName">景点名称</param>
public DataInfo(string ViewPic, string ATID, string CountryID,string ATName)
{
m_ViewPic = ViewPic;
m_ATID = ATID;
m_CountryID = CountryID;
m_ATName = ATName;
m_ViewTime = DateTime.Now;
}
/// <summary>
/// 构造函数
/// </summary>
/// <param name="ViewPic">预浏图片名称</param>
/// <param name="ATID">景点id</param>
/// <param name="CountryID">国家id</param>
/// <param name="ViewTime">查看时间</param>
/// <param name="ATName">景点名称</param>
public DataInfo(string ViewPic, string ATID, string CountryID, string ATName, DateTime ViewTime)
{
m_ViewPic = ViewPic;
m_ATID = ATID;
m_CountryID = CountryID;
m_ATName = ATName;
m_ViewTime = ViewTime;
}
/// <summary>
/// 预浏图片名称
/// </summary>
public string ViewPic
{
get { return m_ViewPic; }
set { m_ViewPic = value; }
}
/// <summary>
/// 景点id
/// </summary>
public string ATID
{
get { return m_ATID; }
set { m_ATID = value; }
}
/// <summary>
/// 国家id
/// </summary>
public string CountryID
{
get { return m_CountryID; }
set { m_CountryID = value; }
}
/// <summary>
/// 景点名称
/// </summary>
public string ATName
{
get { return m_ATName; }
set { m_ATName = value; }
}
/// <summary>
/// 浏览时间
/// </summary>
public DateTime ViewTime
{
get { return m_ViewTime; }
set { m_ViewTime = value; }
}
} /// <summary>
/// cookie操作类
/// </summary>
public class CookieOp
{
private static int m_MaxCount = 6;
private static ArrayList m_Arr;
static CookieOp()
{
m_Arr = new ArrayList();
if (HttpContext.Current.Request.Cookies["recentview"] != null && HttpContext.Current.Request.Cookies["recentview"].Value != "")
{
string Data = HttpUtility.UrlDecode((HttpContext.Current.Request.Cookies["recentview"].Value + "").Trim());
if (Data != "")
{
string[] ds = Data.Split('|');
string[] di;
DataInfo d;
for (int i = 0; i < ds.Length; i++)
{
di = ds[i].Split(',');
d = new DataInfo(di[0], di[1], di[2],di[4], DateTime.Parse(di[3]));
m_Arr.Add(d);
}
}
}
}
/// <summary>
/// 最近浏览景点的数组
/// </summary>
public static ArrayList Arr
{
get
{
//如果多于2条记录则先按时间排序排序
if(m_Arr.Count>1)
m_Arr.Sort(new SortByTime());
return m_Arr;
}
}
/// <summary>
/// 显示最近浏览的数量,最默认为6条
/// </summary>
public static int MaxCount
{
get { return m_MaxCount; }
set { m_MaxCount = value; }
}
/// <summary>
/// 添加当前浏览的景点
/// </summary>
/// <param name="d">景点数据对象</param>
public static void Add(DataInfo d)
{
DataInfo di = GetContainObj(d.ATID);
if (di == null)
{
if (m_Arr.Count < MaxCount)
m_Arr.Add(d);
else
{
m_Arr.Sort(new SortByTime());//先排序
m_Arr.RemoveAt(MaxCount - 1);//排序完后删除最后一条记录
m_Arr.Add(d);
}
}
else
di.ViewTime = d.ViewTime;//更新数据
}
/// <summary>
/// 添加当前浏览的景点
/// </summary>
/// <param name="ViewPic">预浏图片名称,不包含路径</param>
/// <param name="ATID">景点id</param>
/// <param name="CountryID">国家id</param>
/// <param name="ATName">景点名称</param>
public static void Add(string ViewPic, string ATID, string CountryID, string ATName)
{
DataInfo d = new DataInfo(ViewPic, ATID, CountryID, ATName, DateTime.Now);
Add(d);
}
private static DataInfo GetContainObj(string ATID)
{
foreach (DataInfo di in m_Arr)
{
if (di.ATID == ATID)
return di;
}
return null;
}
/// <summary>
/// 把数组对象转换为字符串
/// </summary>
/// <returns></returns>
public static new string ToString()
{
string Data = "";
foreach (DataInfo di in m_Arr)
{
Data += di.ViewPic + "," + di.ATID + "," + di.CountryID + ","
+ di.ViewTime.ToString() + "," + di.ATName.Replace(",", "").Replace("'", "") + "|";
}
if (Data.EndsWith("|"))
Data = Data.Trim(new char[] { '|'});
return HttpUtility.UrlEncode(Data);
}
/// <summary>
/// 保存cookie
/// </summary>
public static void Save()
{
HttpCookie hc = new HttpCookie("recentview", CookieOp.ToString());
hc.Expires = DateTime.Now.AddYears(1);
HttpContext.Current.Response.Cookies.Add(hc);
}
}
/// <summary>
/// 按时间比较接口
/// </summary>
public class SortByTime : IComparer
{
#region IComparer 成员
/// <summary>
/// 按时间比较,从新到旧
/// </summary>
/// <param name="x">对象1</param>
/// <param name="y">对象2</param>
/// <returns>比较结果</returns>
public int Compare(object x, object y)
{
DataInfo dx = (DataInfo)x;
DataInfo dy = (DataInfo)y;
if (dx.ViewTime > dy.ViewTime)
return -1;
else if (dx.ViewTime < dy.ViewTime)
return 1;
else
return 0;
}
#endregion
}
}
to 3 楼:你给我代码我还没明白意思。
to 4 楼:基恩上懂了,开始我查看的产品是随机的,也就是说在它旁边的一系列列表是动态实现的。 应该怎么去做呢?
这是最原始的方法
跟它类型相似的产品列表 -------- Select * From ProTable Where Type = @thistype
跟它价格相似的产品列表 -------- Select * From ProTable Where Price > @thisprice - 100 Or Price < @thisprice + 100
就说明有产品类型的字段和价格的字段 在鼠标经过产品类型的时候可以把它的类型作为where后面的条件去查询相同产品的名称,至于价格也用同样的办法。为了体现良好的界面效果,读数据的时候可以用AJAX,在显示的时候可以用DIV 这样就可以达到你所说的网上的效果了。
2.价格比较的在SQL中用BETWEEN查询价格也能满足你的要求
假如我有两个产品a和b,价格都是3000块,我十分要查我的数据表like两次?数据表有多少记录?太多了
2999块的也要like下,那得了。
可以自己分表存储数据,比如100价为的存table_100中,1000的存table_1000中,还有很多可以自己设定的规则,分类存。可以适当考虑数据冗余,为了性能!,