![](/img/trans.png)
[英]How to group SQL data in separate arrays with PHP foreach loop?
[英]How to group SQL instances in arrays
我有一個將學生鏈接到類的SQL表。 該表主要具有ID user_id和class_id。 假設每個user_id對表都是唯一的,但class_ids不是。
我想檢索user_id的所有實例,並按class_id對其進行分組。 我還希望能夠代表PHP返回的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..>
)
)
我知道我可以為每個類調用一個SQL注入,然后從該類返回用戶,並將結果格式化為我在PHP中所需的格式,但是是否有一種方法可以在一個SQL請求中執行此操作,而不必執行一個請求每個班級(+1個請求以獲取班級ID列表)?
這是因為我需要訪問特定的類,因此我認為PHP中數組的鍵/值解決方案是訪問類的最佳方法。
最簡潔的答案是不。 如果您使用LEFT JOIN,則可以同時獲得包含班級信息和學生信息的一個結果集。 它不是上面確切的格式,而是一個非常簡單的轉換。
結果集看起來像
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
//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'];
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.