PHP统计价格区间商品数,【php】统计goods_category表中各分类下商品的总数量

class sitemap_model extends Abstract_Model {

/**

* 获得指定分类同级的所有分类以及该分类下的子分类

*

* @access public

* @param integer $cat_id 分类编号

* @return array

*/

function get_cat_tree($cat_id = 0){

$tbl_category = TBL_PRE . "goods_category";//商品分类表

$parent_id = 0;//默认情况下 父级分类id为0

/*

判断当前分类中是否是底级分类,

如果是,则取出底级分类上级分类,

如果不是,则取当前分类及其下的子分类

*/

$sql = "SELECT count(*) FROM $tbl_category WHERE category_pid = $parent_id and is_nav = 1";//统计商品分类表中在导航栏显示的顶级分类的数量

if ($this->db->get_one($sql) || $parent_id == 0){//数量大于0的情况

/* 获取当前分类及其子分类 */

$sql = "SELECT category_id,category_name ,category_pid FROM $tbl_category WHERE category_pid = '$parent_id' and is_nav = 1";//统计商品分类表中在导航栏显示的顶级分类的信息

$res = $this->db->get_all($sql);//获取顶级分类的信息,如:女装、男装、配饰

foreach ($res AS $row){//循环顶级分类

$cat_arr[$row['category_id']]['id'] = $row['category_id'];//顶级分类id

$cat_arr[$row['category_id']]['name'] = $row['category_name'];//顶级分类名称

$cat_arr[$row['category_id']]['pid'] = $row['category_pid'];//顶级分类父id

if (isset($row['category_id']) != NULL){//如果当前顶级分类id存在,且不为空的话

$tmparray = $this->get_children($row['category_id']);//获取当前顶级分类下所有一级分类id拼接成的sql,如果含有二级子分类,则也会将二级子分类id拼接进来,如:"g.category_id in (1,2,3,4,5)',这是只是一个拼接的sql语句,真正的统计数量,则是在下面这行代码

$cat_arr[$row['category_id']]['num'] = $this->get_cat_num($tmparray);//获取当前顶级分类下的商品数量

$cat_arr[$row['category_id']]['cat_id'] = $this->get_child_tree($row['category_id']);//获得一级子分类及二级子分类下的商品数量

}

}

}

if(isset($cat_arr)){

return $cat_arr;

}

}

//获取子分类树

function get_child_tree($tree_id = 0){//获取顶级分类下的一级子分类

$tbl_category = TBL_PRE . "goods_category";

$three_arr = array();

$sql = "SELECT count(*) FROM $tbl_category WHERE category_pid = $tree_id and is_nav = 1";//当前顶级分类下的一级子分类数量

if ($this->db->get_one($sql) || $tree_id == 0){

$child_sql = "SELECT category_id,category_name ,category_pid FROM $tbl_category WHERE category_pid = $tree_id and is_nav = 1";

$res = $this->db->get_all($child_sql);

foreach ($res AS $row){

$three_arr[$row['category_id']]['id'] = $row['category_id'];//一级子分类id

$three_arr[$row['category_id']]['name'] = $row['category_name'];//一级子分类名称

$three_arr[$row['category_id']]['pid'] = $row['category_pid'];//一级子分类pid

if (isset($row['category_id']) != NULL){

$tmparray = $this->get_children($row['category_id']);//获取当前一级子分类及其下所有二级子分类ids拼接成的sql

$three_arr[$row['category_id']]['num'] = $this->get_cat_num($tmparray);//获取当前一级子分类及其下所有二级子分类的商品总数量

$three_arr[$row['category_id']]['cat_id'] = $this->get_child_tree($row['category_id']);//递归获取当前一级子分类下的二级子分类

}

}

}

return $three_arr;

}

/**

* 获得指定分类下的所有子分类的ID

* @access public

* @param integer $cat 指定分类的ID

* @return string

*/

function get_children($cat){//pid

$sql = "SELECT category_id FROM ".TBL_PRE."goods_category where category_pid=$cat and is_nav = 1";//顶级分类下的一级子分类ids

$res = $this->db->get_all($sql);

$arr = array();

foreach($res as $val){

$sql = "SELECT count(*) as num FROM ".TBL_PRE."goods_category where category_pid=$val[category_id] and is_nav = 1";//顶级分类下的一级子分类ids,weiyanhui

if($this->db->get_one($sql) > 0){//适用于含有二级子分类的情况

$arr[]=$val['category_id'];//当前一级子分类id;因为一级分类下也可能含有商品,所以必须将此一级分类id存入数组中,如:美妆/护肤

$sql = "SELECT category_id FROM gt_goods_category where category_pid='$val[category_id]' and is_nav = 1";//一级子分类下的二级子分类ids

$res = $this->db->get_all($sql);

foreach($res as $val){

$arr[]=$val['category_id'];//一级子分类下的所有二级子分类ids,如:美妆/护肤/化妆水

}

}else{//适用于只有一级子分类的情况

$arr[]=$val['category_id'];//当前一级子分类ids,如:配饰/腰带

}

}

$arr[]=$cat;

$arr = array_unique($arr);//去除重复

$item_list_tmp = '';

foreach ($arr AS $item){

if ($item !== ''){

$item_list_tmp .= $item_list_tmp ? ",'$item'" : "'$item'";//拼接sql

}

}

return "g.category_id" . ' IN (' . $item_list_tmp . ') ';//如:g.category_id in (1,2,3)

}

/**

* 获得对应分类下所有商品数量(包含自分类数量)

*

* @access public

* @param array$children

* @return $total

*/

function get_cat_num($children){//统计当前分类下的商品数量(顶级分类、一级分类、二级分类、等等)

$tbl_product = TBL_PRE . "products";

$tbl_goods = TBL_PRE . "goods";

$sql ="SELECT count(g.goods_id) FROM $tbl_goods AS g, $tbl_product AS p WHERE $children AND p.goods_id = g.goods_id AND p.is_check = 1 AND p.is_stop = 0 AND p.status = 1";

return $this->db->get_one( $sql);

}

}

?>

二、如图所示:

0818b9ca8b590ca3270a3433284dd417.png

三、生成xml文件:

$get_cats = $sitemap_mod->get_cat_tree(0);

//百度商品搜索分类xml,weiyanhui:2013-01-30

$cat = '<?xml version="1.0" encoding="UTF-8"?>';

$cat .= '';

//百度商品搜索分类xml

foreach($get_cats as $key => $v)

{

$cat .= '';

$cat .= ''.$v['id'].'';

$cat .= ''.$v['name'].'' ;

$cat .= ''.$v['pid'].'';

$cat .= ''.$v['num'].'';

$cat .= ' ';

if(!empty($v['cat_id'])){

foreach($v['cat_id'] as $key=>$v){

$cat .= '';

$cat .= ''.$v['id'].'';

$cat .= ''.$v['name'].'' ;

$cat .= ''.$v['pid'].'';

$cat .= ''.$v['num'].'';

$cat .= ' ';

if(!empty($v['cat_id'])){

foreach($v['cat_id'] as $key=>$v){

$cat .= '';

$cat .= ''.$v['id'].'';

$cat .= ''.$v['name'].'' ;

$cat .= ''.$v['pid'].'';

$cat .= ''.$v['num'].'';

$cat .= ' ';

}

}

}

}

}

$cat .= '';

file_put_contents(WWW_PATH.'/sitemap/cat.xml', $cat);

$name['cat'] = 'sitemap/cat.xml';

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值