3つのテーブルからの情報を含む配列を取得しようとしています。結果は、最初のテーブル、2番目のテーブルからの関連する行、および3番目から2番目のテーブルまでの関連する行をループできる配列になるはずです。現在、3つの個別のSQLクエリがあり、それらは1つの単一の配列に再編成されます。
たぶん誰かがそれらのテーブルをクエリして以下の配列を取得するための最良の方法のアイデアを手伝ってくれるでしょう。現在、テーブルごとに1つずつ、合計3つのクエリを取得しています。mysql JOINを使用すると、非常に簡単なクエリですが、配列に戻すのに問題があります。
mysql JOINを使用して、より少ないクエリで同じ結果を取得することを考えていますが、実際には、それが非常に優れているのか、それとも可能であるのか疑問に思っています。テーブルのおおよそのサイズに数字を追加します。
詳細をお伝えします。
テーブル
courses(4000 rows)
course_id----course_date
groups(50 000 rows)
group_id----group_size----group_course_id
users(200 000 rows)
user_id----user_name----user_group_id
目的の配列の例:
[0] => Array('courseinfo' =>
Array('course_id' => 1234,
'course_date' => '2012-08-12')
'groups' =>
Array( [0] => Array('group_id' => 345,
'group_size' => 3,
'group_course_id' => 1234,
'users' => Array([0] => Array('user_id' => 456,'user_name' => Pete Cabrinha, 'user_group_id = '345'),
[1] => Array('user_id' => 336,'user_name' => John Smith, 'user_group_id = '345'))
[1] => Array('group_id' => 345,
'group_size' => 3,
'group_course_id' => 1234,
'users' => Array([0] => Array('user_id' => 456,'user_name' => Pete Cabrinha, 'user_group_id = '1234'),
[1] => Array('user_id' => 336,'user_name' => John Smith, 'user_group_id = '1234'))))
それほど複雑ではないことを願っています。course_idとgroup_course_idの関係、およびgroup_idとuser_group_idの関係に注意してください。
現時点でクエリを実行する方法のスニペットを次に示します。
$data = $courses = $read->read_courses();
$i = 0;
foreach($courses as $course)
{
if($data[$i]['groups'] = $read->read_groups($course['course_id']))
{
$j = 0;
foreach($data[$i]['groups'] as $group)
{
$data[$i]['groups'][$j]['users'] = $read->read_users($group['group_id']);
$j++;
}
}
else {$data[$i]['groups'][0] = array(); $data[$i]['groups'][0]['users'] = array();}
$i++;
}
そして最後に、私が使用しようと思ったJOIN ...
SELECT
course.course_id,
course.course_date,
groups.group_id,
groups.group_course_id,
groups.group_size,
user.user_name
FROM course
LEFT JOIN groups
ON course.course_id = groups.group_course_id
LEFT JOIN user
ON groups.group_id = user.user_group
誰かがここで私を助けてくれるか、私を正しい方向に導いてくれることを願っています-あるいはもっと良いアイデアを思いつくことさえできます。