2013-09-08 3 views
1

Je veux afficher le menu de la base de données mysql. C'est ce que j'ai essayé jusqu'à présent et je ne sais pas ce que l'erreur est. J'apprécie toute aide. J'ai posté la table que je veux afficher et l'erreur que je suisobtenir des données hiérarchiques de mysql

Attention: mysql_fetch_assoc() attend le paramètre 1 pour être ressource, booléenne donnée dans C: \ wamp \ www \ seconde _try \ eCRA.php sur la ligne 18

<?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]

+0

Votre requête échoue, donc '$ query' est initialisé avec' false'. Utilisez 'mysql_error()' pour étudier votre problème. – diegoperini

+0

Votre appel mysql_query retourne 'false' en raison d'une erreur. (Vous devriez vérifier ceci avant d'utiliser '$ query'). En supposant que l'espace dans 'W HERE' est une faute de frappe dans votre question, vous devez utiliser' mysql_error' pour montrer l'erreur de la base de données. i.e 'echo mysql_error();' juste après l'appel 'mysql_query'. – SpaceDog

+0

duplication possible de [mysql \ _fetch \ _ray() s'attend à ce que le paramètre 1 soit resource, booléen donné dans select] (http://stackoverflow.com/questions/2973202/mysql-fetch-array-expects-parameter-1-to -be-resource-boolean-given-in-select) –

Répondre

0

en ligne 11 vous avez $row['count'] qui signifie que vous extrayez e La colonne count qui n'est pas dans vos colonnes de base de données (selon votre image ci-jointe), je pense que vous le souhaitez.

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

Voici ce qui ne va pas:

$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); 

Vous utilisez des guillemets simples pour le référencement à un nom de table. Tu ne peux pas faire ça. Vous auriez besoin d'utiliser backticks pour cela!

Comme si:

$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); 

Je voudrais également souligner que votre code est peut-être vulnérable à l'injection SQL. Regardez, si cela ne vous dérange pas.

0

Vous utilisez la mauvaise syntaxe. FROM 'menu' devrait être avec au lieu de contre-apostrophes guillemets simples:

FROM `menu` 
0

mysql_query ne parvient pas à obtenir le résultat utiliser mysql_error() pour trouver le problème

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); 
0

parent supposant est numérique, essayez ceci ...

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; 
Questions connexes