protected function getGoods() { //读取当前路径参数条件下的所有商品 $args = explode('-', $_GET['s']); //拆解路径 $args = array_filter($args); //过滤没有筛选条件属性 $brand = Q('brand_id') ? ' and brand_id=' . Q('brand_id') : ''; //添加品牌筛选条件 //添加价格筛选条件 if (!Q('price_level')) { //价格等级为0时,不添加筛选条件 $price = ''; } else { $price_level = explode('-', Q('price_level')); if (sizeof($price_level) == 1) { $price = ' and goods_price>' . $price_level[0]; } else { $price = ' and goods_price between ' . $price_level[0] . ' and ' . $price_level[1]; } } //A:如果规格中有相同的属性值,可能会出现问题 //B:如果多个分组公用同一个类型时,可能会出现重复的情况 if ($args) { $v = "('" . implode("','", $args) . "')"; $sql = "select * from hd_goods_attr ga \n left join hd_goods g \n on ga.goods_id=g.goods_id \n where ga.goods_attr_value in " . $v . " \n and g.cate_id=" . Q('cate_id') . $brand . $price . " \n group by g.goods_id \n having count(*)=" . sizeof($args); $goods_count = sizeof(Db::select($sql)); $page = Page::make($goods_count); //分页 $sql = "select * from hd_goods_attr ga \n left join hd_goods g \n on ga.goods_id=g.goods_id \n where ga.goods_attr_value in " . $v . " \n and g.cate_id=" . Q('cate_id') . $brand . $price . " \n group by g.goods_id \n having count(*)=" . sizeof($args) . " \n limit " . Page::limit(); // echo $sql; $data = Db::select($sql); // //查询商品属性表,找出当前分类、满足筛选条件的记录 // $goods = Db::table('goods_attr')->whereIn('goods_attr_value',$args)->groupBy('goods_id')->having('count(*)','=',sizeof($args))->get(); // $page = Page::make(sizeof($goods)); //分页 // //根据分页限制获取商品 // $goods_limit = Db::table('goods_attr')->whereIn('goods_attr_value',$args)->groupBy('goods_id')->having('count(*)','=',sizeof($args))->limit(Page::limit())->get(); // foreach ($goods_limit as $k => $v) { // //根据查出的ID反查出商品信息 // $data[$k]= Db::table('goods')->where('goods_id',$v['goods_id'])->where('cate_id',$_GET['cate_id'])->first(); // } } else { $brand = Q('brand_id') ? ' and brand_id=' . Q('brand_id') : ''; //添加品牌筛选条件 $sql = "select * from hd_goods where cate_id=" . Q('cate_id') . $brand . $price; $goods_count = sizeof(Db::select($sql)); $page = Page::make($goods_count); //分页 $sql = "select * from hd_goods where cate_id=" . Q('cate_id') . $brand . $price . " limit " . Page::limit(); $data = Db::select($sql); // $goods_count = sizeof(Db::select($sql)); // $page = Page::row(2)->make($goods_count); //分页 // $sql = "select * from hd_goods_attr ga // left join hd_goods g // on ga.goods_id=g.goods_id // where ga.goods_attr_value in ".$v." // and g.cate_id=".Q('cate_id').$brand." // group by g.goods_id // having count(*)=".sizeof($args)." // limit ".Page::limit(); // echo $sql; // $data = Db::select($sql); // //查询商品找出当前分类的记录 // $goods = Db::table('goods')->where('cate_id',$_GET['cate_id'])->get(); // $page = Page::make(sizeof($goods)); //分页 // //根据分页限制获取商品 // $goods_limit = Db::table('goods')->where('cate_id',$_GET['cate_id'])->limit(Page::limit())->get(); // foreach ($goods_limit as $k => $v) { // //根据查出的ID反查出商品信息 // $data[$k]= Db::table('goods')->where('goods_id',$v['goods_id'])->first(); // } } $goodsData['page'] = $page; $goodsData['data'] = $data; return $goodsData; }