2016-08-04 17 views
0

Я в настоящее время настройки таблицы базы данных следующим образом:PHP и MySQL - Петля запрос, если значение не равно нулю

| id | thing_id | value 

«thing_id» относится к уникальному идентификатору в той же таблице.

Я пытаюсь создать функцию (в PHP), которая будет запускать запрос к базе данных MySQL, выгружать эту информацию в массив, а если «thing_id» NOT NULL, она будет возвращаться назад и снова запускать запрос , и добавьте информацию в существующий массив. Это будет продолжаться до тех пор, пока значение "thing_id" не будет равно NULL.

Как я могу это сделать? Кстати, я разрабатываю это поверх WordPress.

Нижеследующее ниже работает, но я чувствую, что есть лучший способ сделать это. Как я могу упростить это и сделать его не ресурсом hog? Вот что у меня есть:

 $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 injection bug] (http://bobby-tables.com/), поместив данные пользователя непосредственно в свой запрос. ** НИКОГДА не делайте этого. Вместо этого используйте функцию WordPress [готовые заявления] (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>'; 
      } 
Смежные вопросы