您的位置:首页 > 其它

帖子回复解决方案—说—无限级分类

2015-11-04 20:42 375 查看


帖子回复——无限级分类

若是QQ空间那种,这里无需再使用无限级分类。

而是帖子之下的评论回复使用字段标记分清从属后按时间排序就行



//根据回复评论表,查询出回复人和被回复人信息

select
acrr.id,comment_id,content,time,acrr.account_id,type,mi.name as mename,mi.image as mimg,
do.name as doname,do.image as dimg,replied_account_id,rtype,(select name from ll_member_info where account_id=replied_account_id) as rmename,
(select name from ll_doctor_info where account_id=replied_account_id) as rdoname,
(select image from ll_member_info where account_id=replied_account_id) as rmimg,
(select image from ll_doctor_info where account_id=replied_account_id) as rdimg
from
ll_article_comment_reply_record as acrr
left join ll_member_info as mi on acrr.account_id=mi.account_id
left join ll_doctor_info as do on acrr.account_id=do.account_id
where
article_id=$article_id
AND comment_id=$cid
order by time asc

无限级分类:一个分类型可以有无限个分类

常见的无限分类实现



商品分类,子类导航,贴吧回帖

//=====1.递归方式实现无限级分类======

原理:每个分类都需记录它的父级id,当为顶级分类时,父级id为0.每个分类都可通过父级id一层层查明它所在父级,以便知道它所属分类,层级深度为几。

递归——自己调用自身(一定要有判断)?

储存结果的变量迭代方法

function getList(&$i=1){

echo $i.'<br/>';

$i++;

if($i<20){

getList($i);

}

}

getList();

$i=1;

function getList(){

global $i;

echo $i.'<br/>';

$i++;

if($i<20){

getList($i);

}

}

getList();

function getList(){

static $i=1;

echo $i.'<br/>';

$i++;

if($i<20){

getList($i);

}

}

getList();

总结:

self::getList($row['id'],$result,$spac);不断递归pid

$sql='select * from imooc where pid='.$pid;不断按需要调整条件查询

function getList($pid=0,&$result=array(),$spac=0) $result[]=$row;不断迭代

当使用迭代去除所有数据时,是怎样区分ta分级的。

getList($pid=0,&$result=array(),$spac=0)

用这个表示区分层数,每次调用都是new出新栈独立运算

//=====2.全路径无限分类:以一个字段把它所有父级ID按顺序记录下来=====



总结:

$sql="select id,catename,path,concat(path,',',id) as fullpath from imooc order by fullpath asc";

他在order by的时候就已经将序列搞好了

区分深度

$deep=count(explode(',', trim($row['fullpath'],',')));

///////////////////////////////////////////////////////////////////无限级分类_代码展示////////////////////////////////////////////////////////////////////////////

<?
/*
* Author:Abo
* Date:2015/7/27
*/
/*
变成下拉列表
从pid=0递归下去
*/
class toList{
public static $mysqli;

function conn(){
$mysqli=new mysqli('localhost','root','','test');
$mysqli->query('set names utf8');
if(!$mysqli) die("连接数据库失败".$mysqli->connect_error());
return $mysqli;
}

function getList($pid=0,&$result=array(),$spac=0){
$spac=$spac+4;
$mysqli=self::conn();
$sql='select * from imooc where pid='.$pid;
$res=$mysqli->query($sql);
while ($row=$res->fetch_assoc()) {
$row['catename']=str_repeat(' ', $spac).'|--'.$row['catename'];
$result[]=$row;
self::getList($row['id'],$result,$spac);             //递归
}
return $result;
if($mysqli!=null) $mysqli->close();
}
}
/*
按要求封装数据,变成下拉列表
*/
function displayCate($pid = 0, $selected = 0) {
$ts = new toList ();
$ts->conn ();
$rs = $ts->getList ();
$temp=null;
$str="<select name='cate'>";
foreach ( $rs as $val ) {
$temp=null;
if($val['id']==$selected){
echo $val['id'];
$temp="selected='selected'";
}
$str.="<option $temp >".$val ['catename'].'</option>';
}
$str.='</select>';
return $str;
}
header("Content-Type: text/html;charset=utf8");
echo displayCate(0,2);

/*
变成导航栏
从pid=10递归上来再倒序
*/
class toList{
public $host='localhost';
public $username='root';
public $password='';
public $db='test';

function conn(){
$mysqli=new mysqli($this->host,$this->username,$this->password,$this->db);
$mysqli->query('set names utf8');
if(!$mysqli) die('数据库连接失败'.$mysqli->connect_error);
return $mysqli;
}

function getList($id,&$result=array()){
$sql='select * from imooc where id='.$id;

$mysqli=self::conn();
$res=$mysqli->query($sql);
if($row=$res->fetch_assoc()){

$result[]=$row;
self::getList($row['pid'],$result);
}

return $result;
}
}

$ts=new toList();
$rs=$ts->getList(10);
/*
按要求封装变成地址导航
*/
echo krsort($rs);

header("Content-Type: text/html;charset=utf8");
echo '<pre>';
print_r($rs);

//===============================全路径无限分类==================================
/*
下拉列表
*/
class toList{
public $host='localhost';
public $username='root';
public $password='';
public $db='test';

function conn(){
$mysqli=new mysqli($this->host,$this->username,$this->password,$this->db);
$mysqli->query('set names utf8');
if(!$mysqli) die('数据库连接失败'.$mysqli->connect_error);
return $mysqli;
}

function getList(){
$sql="select id,catename,path,concat(path,',',id) as fullpath from imooc order by fullpath asc";

$mysqli=self::conn();
$res=$mysqli->query($sql);
$result=array();

while($row=$res->fetch_assoc()){
$deep=count(explode(',', trim($row['fullpath'],',')));
$row['catename']=str_repeat(' ', $deep).'|--'.$row['catename'];
$result[]=$row;
//             self::getList($row['pid'],$result);
}

return $result;
}
}

$ts=new toList();
$rs=$ts->getList();

header("Content-Type: text/html;charset=utf8");
$str="<select name='cate'>";
foreach ($rs as $val){
$str.='<option>'.$val['catename'].'<option>';
}
$str.="</select>";

echo $str;

class toList{
public $host='localhost';
public $username='root';
public $password='';
public $db='test';

function conn(){
$mysqli=new mysqli($this->host,$this->username,$this->password,$this->db);
$mysqli->query('set names utf8');
if(!$mysqli) die('数据库连接失败'.$mysqli->connect_error);
return $mysqli;
}

function getList($cateid){
$sql="select * ,concat(path,',',id) fullpath from imooc where id= $cateid";

$mysqli=self::conn();
$res=$mysqli->query($sql);
$row=$res->fetch_assoc();
$ids = $row['fullpath'];
$sql="select * from imooc where id in ($ids) order by id asc";
$res=$mysqli->query($sql);

$result=array();

while($row=$res->fetch_assoc()){
$deep=count(explode(',', trim($row['fullpath'],',')));
$row['catename']=str_repeat(' ', $deep).'|--'.$row['catename'];
$result[]=$row;
//             self::getList($row['pid'],$result);
}

return $result;
}
}

$ts=new toList();
$rs=$ts->getList(4);
echo '<pre>';
print_r($rs);
header("Content-Type: text/html;charset=utf8");
// $str="<select name='cate'>";
/*
按要求封装变成地址导航
*/
foreach ($rs as $val){
echo "<a href=''>".$val['catename'].
"</a>>";
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: