2012-03-21 5 views
1

私は、生徒をクラスにリンクするSQLテーブルを持っています。この表には、主にID user_idとclass_idがあります。各user_idがテーブルに対して一意ですが、class_idsはそうではないとしましょう。SQLインスタンスを配列にグループ化する方法

私はuser_idのすべてのインスタンスを取得し、それらをclass_idでグループ化したいと考えています。私はクラスごとにSQLの注入を呼び出し、そのクラスからユーザーを返し、フォーマットができ知っ

array(
class_id => array(
    user_id => <user info..>, 
    user_id => <user info..>, 
    user_id => <user info..> 
), 
class_id => array(
    user_id => <user info..>, 
    user_id => <user info..>, 
    user_id => <user info..> 
), 
class_id => array(
    user_id => <user info..>, 
    user_id => <user info..>, 
    user_id => <user info..> 
) 

:私はまた、PHPで以下のように、SQLによって返される結果をreprensentできるようにしたかったです結果はPHPで必要なフォーマットになりますが、クラスごとに1つのリクエスト(クラスIDのリストを取得するために1回のリクエスト)を行う必要があるため、1つのSQLリクエストでこれを行う方法がありますか?

私は特定のクラスにアクセスする必要があるので、PHPの配列のキー/値の解決策がクラスにアクセスする最善の方法だと思います。

+0

by class_id –

+0

は、各クラスIDの最初のインスタンスを1つの配列に渡しているようです。 – Prusprus

答えて

1

短い答えはいいえです。 LEFT JOINを使用すると、クラス情報と学生情報の両方で1つの結果セットを得ることができます。それは上記の正確な形式ではありませんが、非常に単純な変換になります。

結果セットが各クラスに1つのレコードが存在することになる

class_id, student_id, student_etc 
class_id, student_id, student_etc 
class_id, student_id, student_etc 

ようになります*学生の数は、その後

classes table 
id, etc 

users table 
id, etc 

class_to_users table 
id, class_id, user_id 

詳しく説明し、そのクラス

を取ります

SELECT classes.id, users.id FROM classes LEFT JOIN class_to_users ON class_to_users.class_id = classes.id LEFT JOIN users ON class_to_users.user_id = users.id WHERE 1 ORDER BY classes.id 
0
//assumes SQL was something like 
// SELECT class_id, user_id, user_info FROM users INNER JOIN users_class ON ... 
//assumes query result is in $query 

$result=array(); 

while (true) { 
    $row=mysql_fetch_array($query); 
    if (!$row) break; 
    if (!isset($result[$row['class_id']])) $result[$row['class_id']]=array(); 
    $result[$row['class_id']][$row['user_id']]=$row['user_info']; 
} 
+0

1人の生徒が複数のクラスを受講することが想定されるため、これは機能しません。学生と授業をつなぐ別のテーブルが必要になると思います。 – dqhendricks

+0

@dqhendricksこれはSQL内で解決されるべきです - PHPコードはそれに対処するように設計されています。 SQL( –

+0

)while($ row = mysql_fetch_array($ query)){'でこれを少し修正して反映するように私の答えを編集しました。 'while(true)'ループは私にその意志を与えます。 – augustknight

関連する問題