从mysql获取分层数据

时间:2013-09-08 12:33:24

标签: php mysql

我想从mysql数据库显示菜单。这是我到目前为止所尝试的,不知道错误是什么。 我感谢任何帮助。我发布了我要显示的表格和我得到的错误

  

警告:mysql_fetch_assoc()期望参数1是资源,   在第18行的C:\ wamp \ www \ second _try \ eCRA.php中给出的布尔值

<?php
    function display_menu($parent, $level) {
        $query=mysql_query("SELECT n.id, n.menu_name, n.link, d.count FROM 'menu' n 
        LEFT OUTER  JOIN(SELECT parent, COUNT (*) AS count FROM 'menu' GROUP BY
        parent) d ON  n.id=d.parent  W HERE n.parent=".$parent);
        echo"<ul>";

        while($row = mysql_fetch_assoc($query)) {
            if($row['count']>0) {
                echo"<li><a href='" .$row['link']. "'>". $row['menu_name'] ."</a>";
                display_menu($row['id'], $level + 1);
                echo"</li>";
            }//f
            elseif($row['count']==0) { 
                echo"<li><a href='". $row['link'] ."'>". $row['menu_name'] ."</a></li>";
            }else; 
        }//w
        echo"</ul>";
    }

    display_menu(0,2);
?>

![error][1] ![Table][2]

5 个答案:

答案 0 :(得分:0)

在线11您有$row['count'],这意味着您正在检索数据库列中没有的列count(根据您的附加图片),我想您想要这个

if(mysql_num_rows($query)>0){
//do stuff here 
}
elseif(mysql_num_rows($query)>==0){
//do stuff here 
}

答案 1 :(得分:0)

这是错的:

$query=mysql_query("SELECT n.id, n.menu_name, n.link, d.count FROM 'menu' n 
    LEFT OUTER  JOIN(SELECT parent, COUNT (*) AS count FROM 'menu' GROUP BY
    parent) d ON  n.id=d.parent  W HERE n.parent=".$parent);

您使用单引号来引用表名。你不能这样做。你需要使用反引号

像这样:

$query=mysql_query("SELECT n.id, n.menu_name, n.link, d.count FROM `menu` n 
    LEFT OUTER JOIN (SELECT parent, COUNT (*) AS count FROM `menu` GROUP BY
    parent) d ON  n.id=d.parent  W HERE n.parent=".$parent);

我还想指出您的代码可能容易受到SQL注入攻击。 如果你不介意的话,请考虑一下。

答案 2 :(得分:0)

您使用了错误的语法。 FROM 'menu'应该使用反引号而不是单引号:

  FROM `menu` 

答案 3 :(得分:0)

mysql_query无法获得结果使用 mysql_error()来查找问题

 function display_menu($parent, $level) {
    $query=mysql_query("SELECT n.id, n.menu_name, n.link, d.count FROM 'menu' n 
    LEFT OUTER  JOIN(SELECT parent, COUNT (*) AS count FROM 'menu' GROUP BY
    parent) d ON  n.id=d.parent  W HERE n.parent=".$parent) or die(mysql_error());
    echo"<ul>";

    while($row = mysql_fetch_assoc($query)) {
        if($row['count']>0) {
            echo"<li><a href='" .$row['link']. "'>". $row['menu_name'] ."</a>";
            display_menu($row['id'], $level + 1);
            echo"</li>";
        }//f
        elseif($row['count']==0) { 
            echo"<li><a href='". $row['link'] ."'>". $row['menu_name'] ."</a></li>";
        }else; 
    }//w
    echo"</ul>";
}

display_menu(0,2);

答案 4 :(得分:0)

假设父级是数字,请尝试此...

SELECT n.id
     , n.menu_name
     , n.link
     , d.count 
  FROM menu n 
  LEFT 
  JOIN 
     ( SELECT parent 
            , COUNT (*) count 
         FROM menu
        GROUP 
           BY parent
     ) d 
    ON n.id = d.parent 
 WHERE n.parent = $parent;