簡體   English   中英

如何在數組中對SQL實例進行分組

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM