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

多参数筛选技术

在产品分类列表页面如何做到参数筛选,即如果该分类的参数是查询出来的,参数个数是不固定的,我们需要点击某个参数值去筛选产品,实现效果可以参见京东的分类列表页面。下面就是实现的方法,其中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语句查询结果的交集。适当借助临时表,这样就可以实现多参数查询时也只访问一次数据库,提高查询效率。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值