表:
create table `catelog` (
`id` bigint not null auto_increment,
`name` varchar(255) default null,
`parent_id` bigint default null,
primary key (`id`)
) engine=innodb auto_increment=7 default charset=utf8;
insert into `catelog` values (1, '軍事', 0);
insert into `catelog` values (2, '法律', 0);
insert into `catelog` values (3, '軍事子', 1);
insert into `catelog` values (4, '法律子', 2);
insert into `catelog` values (5, '軍事滋滋', 3);
insert into `catelog` values (6, '法律滋滋', 4);
語句:
1 select t2.*
2 from (
3 select
4 @r as _id,
5 (select @r := parent_id from catelog where id = _id) as parent_id,
6 @l := @l + 1 as lvl
7 from
8 (select @r := 6, @l := 0) vars,
9 catelog h
10 where @r <> 0) t1
11 join catelog t2
12 on t1._id = t2.id
13 order by t1.lvl desc
我們就是來拆解一下
@r := 6 //定義乙個變數 要查詢的子欄目id
@l := 0 //層級 最底層為0
(select @r := 6, @l := 0) vars //這就是定義變數的規定寫法
(select @r := parent_id from catelog where id = _id) as parent_id //最核心的就是這一句查到 id為6的 就把id覆蓋為parent_id
select
@r as _id,
(select @r := parent_id from catelog where id = _id) as parent_id,
@l := @l + 1 as lvl
from
(select @r := 6, @l := 0) vars,
catelog h
where @r <> 0) t1
上面看懂了 這也就不用解釋了
最後join 也不解釋了
dedecms呼叫當前欄目的子欄目怎麼操作
有時我們建 會建很多分類,每個分類又有小分類,為了讓頂級欄目獲得更好的權重和排名,我們會聚合子欄目。那麼dedecms呼叫當前欄目的子欄目怎麼操作呢?有兩種方法 標籤dede sonchannel和標籤channel type son 1 dede sonchannel field typename...
dedecms呼叫當前欄目的子欄目怎麼操作
有時我們建 會建很多分類,每個分類又有小分類,為了讓頂級欄目獲得更好的權重和排名,我們會聚合子欄目。那麼dedecms呼叫當前欄目的子欄目怎麼操作呢?有兩種方法 標籤dede sonchannel和標籤channel type son 1 dede sonchannel field typename...
DEDECMS 獲取當前欄目及所有子欄目的文章數量
因dedev5起,加強了對sql注入和安全的檢查,導致無法查詢一些正常的子查詢的sql。以下 用來解決查詢當前欄目及當前欄目下所有子欄目的文章總數,新增到 include common.func.php 或者 include extend.func.php中,然後在模板中呼叫gettotalarcb...