天天看点

php 数据库 mysql导航菜单_具有无限子类别的PHP和Mysql树导航菜单

我正在寻找一种从mysql数据库中提取数据以创建无限子类别菜单的方法.

菜单中包含大约1500个类别,它们以以下格式存储在数据库表(菜单)中:

category_id,类别标题,parent_id

我想做1 mysql查询将所有数据放入一个数组.

$menu_list =array();

$query = mysql_query("SELECT * FROM menu ORDER BY category_id ASC");

if(mysql_num_rows($query) != 0) {

while($row = mysql_fetch_array($query)){

$category_id = $row['category_id'];

$title = $row['category_title'];

$parent_id = $row[parent_id'];

$menu_list[] = array($category_id,$title,$parent_id);

}

}

那就是我当前用来将数据转换为数组的代码.

然后,我需要遍历数组以建立菜单.

然后,我将隐藏所有子类别并使用jquery扩展(我可以做到这一点没问题)

我遇到的问题是遍历数组并以正确的顺序显示数据.

该菜单具有无限的子类别,因此可能需要是一个递归函数才能检索数据.

我在这里关注了很多示例,但是后来我迷失了如何显示数据.

我现在需要结束:

main item

sub cat

sub cat

sub cat

sub cat

main item

sub cat

main item

main item

sub cat

sub cat

sub cat

sub cat

sub cat

etc...

每个类别都在自己的div中

然后,我将需要能够编辑每个类别(即标题名称和位置,如果需要的话)

然后,如果我更改子类别的位置,则快速页面刷新将以新顺序重新加载菜单.

最终,我希望将其拖放到其中,但这将在以后的日期进行.

我希望这已经足够解释了.

提前致谢..

所以问题又来了,困扰着我…

我的ajax调用另一个mysql select的方法对于CMS部分来说还可以,因为它不时使用.

但是现在我们已经到了前端.

每次查看页面时,都会使用大量mysql请求拉出菜单的前3个级别.

随着类别的不断扩大,这现在导致1600个类别每次被拉多次,甚至每天进行1000次访问也将导致每天超过1000000 sql请求.

所以我认为我肯定需要将类别拉入数组,然后递归地遍历数组.

我已经看过上面的解决方案,它们似乎可以在纸上工作,但不能实际应用.

如果有人可以尝试给我另一个解决方案,将不胜感激.

只是回顾一下我的数据库,我有:id,category_name,parent_id

我现在将PDO与mysql配合使用,并准备了一些语句来增强安全性.

提前致谢..

解决方法:

这是您需要的代码

category_id AS id,类别标题AS kategori和parent_id AS kid

function countsubcat($pid)

{

$r=mysql_query("select count(kid) AS say from meskat where kid='$pid' limit 1");

$rw=mysql_fetch_array($r);

return $rw['say'];

}

function listmenu($pid = 0)

{

$res = mysql_query("select id,kategori,kid from meskat where kid='$pid'");

while($cat=mysql_fetch_array($res))

{

echo '

';

print''.$cat['kategori'].'';

if(countsubcat($cat['id'])>0)

{

print'

  • ';

listmenu($cat['id']);

print'

';

}

echo '

';

}

}

echo '

  • ';

listmenu(0); //starting from base category

echo '

';`

标签:tree,arrays,mysql,php,recursion

来源: https://codeday.me/bug/20191201/2077635.html