我有一個包含以下表格MySQL數據庫:MySQL的取2代相關的表爲子陣列
Student
表看起來像這樣:
|------------------------------------|
| studentId | studentName | school |
|------------------------------------|
| 1 | Student A | 1 |
| 2 | Student B | 2 |
| 3 | Student C | 2 |
|------------------------------------|
並有School
表:
|------------------------------|
| schoolId | schoolName | desc |
|------------------------------|
| 1 | School A | ... |
| 2 | School B | ... |
| 3 | School C | ... |
|------------------------------|
使用PHP,我試圖獲取所有學生的數組,並將他們的學校信息包含在子數組中。
Array
(
[0] => Array
(
[studentId] => 1
[studentName] => Student A
[school] => Array
(
[schoolId] => 1
[schoolName] => School A
[desc] => ...
)
)
[1] => Array
(
[studentId] => 1
[studentName] => Student A
[school] => Array
(
[schoolId] => 1
[schoolName] => School A
[desc] => ...
)
)
[2] => Array
(
[studentId] => 1
[studentName] => Student A
[school] => Array
(
[schoolId] => 1
[schoolName] => School A
[desc] => ...
)
)
)
我能夠這樣做
$studentsResult = $conn->query("SELECT * FROM STUDENT");
$studentsArray = $studentsResult->fetch_all(MYSQLI_ASSOC);
$finalArray = array();
foreach ($studentsArray as &$student) {
$schoolSQL = "SELECT * FROM SCHOOL WHERE schoolId = ".$student['schoolId'];
$schoolResult = $conn->query($schoolSQL);
$schoolArray = $schoolResult->fetch_all(MYSQLI_ASSOC);
unset($student['schoolId']);
$student['school'] = $schoolArray[0];
$finalArray[] = $student;
}
echo '<pre>'; print_r($finalArray);
實現這一點,但我不認爲這種方式是最有效的一個龐大的數據庫,因爲我通過循環所有的學生和執行查詢獲得學校排名。
無論如何,我可以通過只使用SQL來做到這一切嗎?
使用'JOIN'得到了學校信息與學生一起信息在同一排。然後就像現在一樣循環並執行類似的操作來創建子數組。 –