子欄目ID按層級查出父欄目 拆解篇

2022-08-02 04:36:15 字數 1744 閱讀 9455

表:

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...