2011-12-29 88 views
0

以正确的方式,这是我的表是这样做到这一点MySQL查询

enter image description here

我试图让下一个主要类别中的所有ID。这个完美的作品,但它做

FROM category WHERE (lft >= '$left') AND (rgt <='$right') 

$allcat_ids = array(); 

    $cat_id = mysql_real_escape_string($_GET['cat_id']); 

    $res = mysql_query("SELECT lft, rgt FROM category WHERE cat_id = '$cat_id'"); 
    while ($category = mysql_fetch_assoc($res)) 
     { 
      $left = $category['lft']; 
      $right = $category['rgt']; 
     } 


    $res = mysql_query("SELECT cat_id, lft, rgt FROM category WHERE (lft >= '$left') AND (rgt <='$right')");` 
    while ($category = mysql_fetch_object($res)) 
     { 

     $allcat_ids[] = $category->cat_id; 

     } 
+0

至少有一点是错误的:绝对没有针对SQL注入防护。 – knittl 2011-12-29 15:56:02

+0

@ knittl你无法分辨。从数据库中加载'$ left'和'$ right'变量,所以如果用户以正确的方式存储它(即使用数字数据类型),用户可以确定它们没问题。 – 2011-12-29 15:59:14

+0

http://www.vbmysql.com/articles/database-design/managing-hierarchical-data-in-mysql – emre 2011-12-29 15:59:45

回答

0

看上去一切正常正确的方式..除>=<=;左右值应该是唯一的。它工作吗?

PS小心注射(使用prepared statements,与PDO如果可能的话)

+0

它工作完美,但我不知道它是否是正确的方法 – emre 2011-12-29 16:04:21

+0

你为什么不确定?如果它起作用,它就会起作用。 – Rijk 2011-12-30 09:04:29