2011-12-29 5 views
0

это мой столэто правильный способ сделать это MySQL запрос

enter image description here

Я пытаюсь получить все идентификаторы под основной категории. это отлично работает, но это правильный способ сделать

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

+0

@knittl Вы не можете сказать. переменные '$ left' и' $ right' загружаются из базы данных, поэтому пользователь может быть уверен, что они в порядке, если он правильно сохранил (т. е. с использованием числовых типов данных). –

+0

http://www.vbmysql.com/articles/database-design/managing-hierarchical-data-in-mysql – emre

ответ

0

Выглядит все в порядке .. для >= и <= исключением; левое и правое значения должны быть уникальными. Это работает?

PS будьте осторожны инъекции (использование prepared statements, с PDO, если это возможно)

+0

работает отлично, но я не уверен, что это правильный способ сделать. – emre

+0

Почему вы не уверены? Если он работает, он работает. – Rijk

Смежные вопросы