2016-08-04 11 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 features](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>'; 
      } 
関連する問題