2017-02-10 9 views
0

データベースに3つのテーブルがあります。学生、モジュール、関係リレーションテーブルの各行には、学生IDとモジュールIDが含まれています(つまり、学生が使用するモジュールが含まれています)。ネストされたループで複数のデータベーステーブルをループする?

私はリレーションテーブルをループし、特定の学生が取っているすべてのモジュールを見つけようとしています。次に、各モジュールの詳細(例:名前とモジュールコード)をプリントアウトします。

私は入れ子にしたループでこれをしようとしていますが、insideループは1回だけ実行され、最初のモジュールが出力されます。私はこれが私のwhileループ内で2番目のSQLクエリを持つことと関係があり、$m_idは各繰り返しで更新されていないと思う。これまでのコードはここにあります

<?php 
     include 'connect.php'; 
     $sql = "SELECT * FROM relations WHERE student_id = '1'"; 
     $result = $conn->query($sql); 
     if($result->num_rows > 0) { 
      while($row = mysqli_fetch_array($result)) { 
       $m_id = $row["module_id"]; 

       $sql = "SELECT * FROM modules WHERE module_id = $m_id"; 
       $result = $conn->query($sql); 
       if($result->num_rows > 0) { 
        while($row = mysqli_fetch_array($result)) { 
         echo $row["module_code"]; 
        } 
       } 
      } 
     } 
?> 

誰でも私を助けてくれますか?

+1

ヒント: 'INNER JOIN' –

答えて

1

INNER JOINを使用して特定の生徒のすべてのモジュールを1つのクエリで呼び出す方法でSELECTクエリを変更できます。このように:

SELECT * FROM modules 
INNER JOIN relations ON relations.module_id = modules.module_id 
WHERE relations.student_id = 1; 

その方法、それはそれはあなたがそのモジュールを検索することを望む学生だと仮定すると、1のIDの生徒と関係を持っているすべてのモジュールをもたらすだろう。 次に、結果配列を反復し、必要なモジュールから値を取得するだけです。

+1

ありがとう@PedroChiiip、それは完璧に機能しました。 –

関連する問題