2012-05-12 9 views
2

私は学生と呼ばれるテーブルがあり、すべての学生のリストが含まれています。各学生は、学生IDで識別される別のテーブルに格納された多数のコースを持つことができます。mysqlでこのクエリを実行することはできますか?

私は学生の情報を使って学生テーブルから行を取得し、そのすべてのコースを1つのクエリで取得するクエリを実行したいと思います。私が欲しいの出力はこのようなものです:学生の情報を取得する

Array 
(
    [0] => Array 
     (
      [id] => 5 
      [firstName] => Bob 
      [lastName] => Smith 
      [email] => .... 
      [courses] => Array 
       (
        [0] => Array 
         (
          [id] => 30 
          [name] => Test Course 
          [price] => 400 
         ) 

        [1] => Array 
         (
          [id] => 30 
          [name] => Test Course 2 
          [price] => 300 
         ) 

       ) 

     ) 

) 

、私はこのクエリ行うだろう:

:学生のためのコースを取得するには

SELECT * FROM students WHERE something ='something' 

を、私はこれを行うだろう

SELECT * FROM courses WHERE studentId = '5' 

それは一度に両方のクエリを実行し、上記のアレイのような出力を得る、または私はそれぞれの学生をループしており、そのコースを得るのですか、それはmanuallly、アレイに接続することは可能ですか?

+0

'group_concat'が役立つかもしれません。 Link:http://www.dougboude.com/blog/1/2009/12/A-SWEET-Little-MySQL-Function-GroupConcat.cfm – Strawberry

+0

SQL構文を探しているのか、配列形式にするためのコーディングを探していますか? –

+0

http://stackoverflow.com/a/5378180/170365 – Strawberry

答えて

1
$query = "select * from students inner join courses on studentID = '5' where something = 'something'"; 
$result = mysql_db_query ($dbname, $query, $link); 
$id = $row[0]; # corresponding to row in students database 
$firstName= $row[1]; # corresponding to row in students database 
$lastName = $row[2]; # corresponding to row in students database 
$email = $row[3]; # corresponding to row in students database 
while($row = mysql_fetch_array($result)) { 
    echo 'id: '.$row[id]; 
    echo '<br>'; 
    echo 'name: '.$row[name]; 
    echo '<br>'; 
    echo 'price: '.$row[price]; 
    echo '<br>'; 
} 
+0

学生IDをハードコードするのではなく、studentId = students.id'で内部結合コースを5とすることは可能ですか?一度に1人ではなく、すべての生徒を募集したい。 –

+0

@Clickはい、ちょうど '5'を ''と置き換えます。$ studentId。 "' – Rodney

+0

いいえ、私は100人の学生がいるなら、一度に1人の学生のためにそれを手に入れています。すべての学生のための時間 –

1

あなたが一緒にテーブルを結合することによってこれを行うことができます。

select s.*, c.* 
from students s join 
    courses c 
    on s.studentid = c.studentid 
where s.something = 'something' 

あなたは1行の学生情報および他の上のコースをしたい場合は、それは不可能です。すべての行に同じ列が必要です。

+0

コース情報を学生の行の配列にしたい、それはできません。 –

+0

これはマルチd配列を作成しません。 – Strawberry

+0

@Strawberryループを除いてマルチd配列を行うことはできませんか? –

1

基本的に新しいコードは次のようになります。

私は思う
$query = "select * from students"; 
$result = mysql_db_query ($dbname, $query, $link); 
while($row = mysql_fetch_array($result)) { 
    $id = $row[0]; # corresponding to row in students database 
    $firstName= $row[1]; # corresponding to row in students database 
    $lastName = $row[2]; # corresponding to row in students database 
    $email = $row[3]; # corresponding to row in students database 
    echo 'id: '.$id; 
    echo '<br>'; 
    echo 'firstName: '.$firstName; 
    echo ' '; 
    echo 'lastName: '.$lastName; 
    echo '<br>'; 
    echo 'email: '.$email; 
    echo '<br>'; 
    $query = "select * from courses where id = '".$id."'"; 
    $result2 = mysql_db_query ($dbname, $query, $link); 
    while($row2 = mysql_fetch_array($result2)) { 
    echo 'name: '.$row2[1]; # corresponding to row in courses database 
    echo '<br>'; 
    echo 'price: '.$row2[2]; # corresponding to row in courses database 
    echo '<br>'; 
    } 
} 
関連する問題