2016-08-04 2 views
0

나는 현재 데이터베이스 테이블 설정과 같이이 있습니다PHP 및 MySQL을 - 루프 쿼리 값이 null가 아닌 경우는

| id | thing_id | value 

은 "thing_id는"동일한 테이블 내에서 고유 한 ID에 관한 것이다.

MySQL 데이터베이스에 대해 쿼리를 실행하고 해당 정보를 배열로 덤프하는 함수 (PHP에서)를 만들려고하는데 "thing_id"가 NOT NULL이면 루프백하고 다시 쿼리를 실행합니다. 정보를 기존 어레이에 추가하십시오. "thing_id"가 NULL이 될 때까지 계속됩니다.

어떻게해야합니까? Btw, 나는 WordPress의 위에 이것을 디자인하고있다.

다음은 작동하지만이 작업을 수행 할 수있는 더 좋은 방법이 있다고 생각합니다. 어떻게 이것을 단순화하고 돼지 자원이되지 않도록 할 수 있습니까? 여기에 내가 무엇을 가지고 있습니다 :

 $related_thingsSql = " 
          SELECT $thingsDB.value, $thingsDB.thing_id, $thingsDB.id 
          FROM $thingsDB 
          WHERE $thingsDB.id = '$related_thing_id' 
          ";    

     $related_things = $wpdb->get_results("$related_thingsSql"); 

     foreach ($related_things as $related_thing) { 
      $related_thing_name[] = $related_thing->value; 
      $related_thing_id2[] = $related_thing->id; 
      $related_thing_id = $related_thing->thing_id;     
     } 
     while ($related_thing_id != NULL) { 
      $related_thingsSql2 = " 
            SELECT $thingsDB.value, $thingsDB.thing_id, $thingsDB.id 
            FROM $thingsDB 
            WHERE $thingsDB.id = '$related_thing_id' 
           ";            
      $related_things = $wpdb->get_results("$related_thingsSql2"); 
      foreach ($related_things as $related_thing) { 
       array_unshift($related_thing_name, $related_thing->value); 
       array_unshift($related_thing_id2, $related_thing->id); 
       $related_thing_id = $related_thing->thing_id; 
       if (empty($related_thing->thing_id)) { 
        $related_thing_id = NULL; 
       } 
      } 
     } 
     $related_things_length = count($related_thing_name); 

     for ($x = 0; $x < $related_things_length; $x++) { 
      echo ' > <a href="' . site_url() . '?id=' . $related_thing_id2[$x] . '">' . $related_thing_name[$x] . '</a>'; 
     } 
+3

작성 코드는 지금까지 시도한 것을 보여줍니다. –

+1

먼저, PHP 및/또는 SQL을 살펴 보겠습니다. 그것이 태그가 말하는 것입니다. –

+1

** 경고 ** : 쿼리에 사용자 데이터를 직접 넣어서 위험한 [SQL 주입 버그] (http://bobby-tables.com/)를 만들었습니다. ** 절대로 이것을하지 마십시오. 대신 WordPress [prepared statements feature] (http://codex.wordpress.org/Class_Reference/wpdb#Protect_Queries_Against_SQL_Injection_Attacks)를 사용하여 모든 데이터 매개 변수를 올바르게 이스케이프 처리하십시오. – tadman

답변

0

나는 방법을 알아 냈습니다. 나는이 방법이 정말로 조잡하다고 생각하지만 그것은 효과가있다. 누구든지 개선 방법에 대한 제안이 있으면 언제든지 자유롭게 생각하십시오.

  $related_thingsSql = " 
           SELECT $thingsDB.value, $thingsDB.thing_id, $thingsDB.id 
           FROM $thingsDB 
           WHERE $thingsDB.id = '$related_thing_id' 
           ";    

      $related_things = $wpdb->get_results("$related_thingsSql"); 

      foreach ($related_things as $related_thing) { 
       $related_thing_name[] = $related_thing->value; 
       $related_thing_id2[] = $related_thing->id; 
       $related_thing_id = $related_thing->thing_id;     
      } 
      while ($related_thing_id != NULL) { 
       $related_thingsSql2 = " 
             SELECT $thingsDB.value, $thingsDB.thing_id, $thingsDB.id 
             FROM $thingsDB 
             WHERE $thingsDB.id = '$related_thing_id' 
            ";            
       $related_things = $wpdb->get_results("$related_thingsSql2"); 
       foreach ($related_things as $related_thing) { 
        array_unshift($related_thing_name, $related_thing->value); 
        array_unshift($related_thing_id2, $related_thing->id); 
        $related_thing_id = $related_thing->thing_id; 
        if (empty($related_thing->thing_id)) { 
         $related_thing_id = NULL; 
        } 
       } 
      } 
      $related_things_length = count($related_thing_name); 

      for ($x = 0; $x < $related_things_length; $x++) { 
       echo ' > <a href="' . site_url() . '?id=' . $related_thing_id2[$x] . '">' . $related_thing_name[$x] . '</a>'; 
      } 
관련 문제