SQL临时表——分类页面的参数条件筛选

来源:互联网 发布:淘宝开店一件代发经验 编辑:程序博客网 时间:2024/05/16 09:36

在产品分类列表页面如何做到参数筛选,即如果该分类的参数是查询出来的,参数个数是不固定的,我们需要点击某个参数值去筛选产品,实现效果可以参见京东的分类列表页面。下面就是实现的方法,其中Product是产品表,Product_relate_spec是产品参数关联表,Product_relate_spec的结构如下:

Product_relate_spec表结构

另外有两个表在此没有体现出来,一个是三级类与参数关联表Product_spec,结构如下:

Product_spec表结构

另一个是参数与产品的排列组合表Product_sku,结构如下:

Product_sku表结构

/// <summary>/// 参数条件筛选下的分页查询/// </summary>/// <param name="strWhere">查询条件</param>/// <param name="pageSize">每页显示个数</param>/// <param name="pageIndex">页码索引(第几页)</param>/// <param name="filedOrder">排序</param>/// <param name="recordCount">需返回的总数</param>/// <returns></returns>public DataSet GetList(string strWhere, int pageSize, int pageIndex, string filedOrder, out int recordCount){    string sql = "select ProductID,ProductName,ProductPic,ProductPrice,AddTime";    string list = "";    StringBuilder strSql = new StringBuilder();    if (strWhere != null && strWhere.Trim() != "")    {        strSql.Append("WITH List AS (" + sql);        strSql.Append(",spec_id from Product a inner join Product_relate_spec b on a.ProductID=b.product_id where prodAuditing=1");    }    else    {        strSql.Append(sql + " from Product where prodAuditing=1");    }    sql = strSql.ToString();    if (strWhere != null && strWhere.Trim() != "")    {        strSql.Append(")");        list = strSql.ToString();        string sql2 = " select ProductID,ProductName,ProductPic,ProductPrice,AddTime from List where ";        string str = "";        foreach (string s in strWhere.Split(','))        {            str += sql2 + s + " intersect ";        }        if (str.LastIndexOf("intersect") > -1)        {            sql = str.Substring(0, str.LastIndexOf(" intersect "));            sql = "select * from (" + sql + ") as T1";        }    }    recordCount = Convert.ToInt32(DataAccess.DC.GetSingle(list + PagingHelper.CreateCountingSql(sql)));    return DataAccess.DC.Query(list + PagingHelper.CreatePagingSql(recordCount, pageSize, pageIndex, sql, filedOrder));}

实现思路是先将数据查询出存放到临时表List中,再根据传入的参数条件从临时表中查询数据,多个参数组合成多个sql语句,用intersect求这多个sql语句查询结果的交集。适当借助临时表,这样就可以实现多参数查询时也只访问一次数据库,提高查询效率。

原创粉丝点击