2
我有這個PHP函數的問題,我試圖用他的角色和組獲取用戶,它的角色工作良好,但我有組的問題,因爲我得到相同的數組組,當然我想要的是重複的自由數組。我明白爲什麼我得到這個,因爲我的用戶有2個角色,我讓他在SQL查詢2次,誰能解釋我什麼是最佳實踐,以及如何避免這種情況,我應該使用這樣的查詢,或者我可以使用另一種查詢在哪裏我會找到所有組的成員,然後把它放在該數組中,但這是2個DB調用一個函數,它可能不是那麼好的解決方案。從多個到多個PHP獲取
function getAll($mysqli) {
$stmt = $mysqli->prepare("SELECT u.id, u.firstName, u.lastName, u.email,
u.phoneNumber, u.address, u.birthDate, ur.roleName, cg.id, cg.name FROM users as u
LEFT OUTER JOIN user_role as ur ON u.id = ur.userId
LEFT OUTER JOIN user_group as ug on ug.userId = u.id
LEFT OUTER JOIN control_group as cg on cg.id = ug.groupId");
$stmt->execute();
$stmt->bind_result($id, $firstName, $lastName, $email, $phoneNumber,
$address, $birthDate, $roleName, $groupId, $groupName);
$users = array();
while ($stmt->fetch()) {
if (empty($users[$id])) {
$users[$id] = array(
'id' => $id,
'firstName' => $firstName,
'lastName' => $lastName,
'email' => $email,
'phoneNumber' => $phoneNumber,
'address' => $address,
'birthDate' => $birthDate,
'roles' => array(),
'groups' => array()
);
}
if ($roleName) {
$users[$id]['roles'][] = array(
'roleName' => $roleName
);
}
if ($groupId) {
$users[$id]['groups'][] = array(
'groupName' => $groupName
);
}
}
$stmt->close();
$mysqli->close();;
echo json_encode($users);
}
當我執行該功能我得到這樣
{
"1":{
"id":1,
"firstName":"John",
"lastName":"Doe",
"email":"[email protected]",
"phoneNumber":"062-441234-123123",
"address":"Some Address 40\/2",
"birthDate":"1989-12-29",
"roles":[
{
"roleName":"Admin"
},
{
"roleName":"User"
}
],
"groups":[
{
"groupName":"Group 1"
},
{
"groupName":"Group 1"
}
]
},
"2":{
"id":2,
"firstName":"Jane",
"lastName":"Doe",
"email":"[email protected]",
"phoneNumber":"0112-11121-221322",
"address":"Address 21ca",
"birthDate":"1975-12-28",
"roles":[
{
"roleName":"Admin"
},
{
"roleName":"User"
}
],
"groups":[
]
}
}
角色都工作正常,我有問題同組,即時知道爲什麼羣體不像角色一樣工作其基本相同的情況 –
如果你有一個用戶在不同的組中具有相同的角色,它將無法工作。試試吧,你會看到它是如何被複制的。 – barbarity
另外,如果你想我的誠實的意見......只有通過我可以看看,我感覺數據庫沒有反映你的業務邏輯或JSON的結構不(或兩者兼而有之)。 – barbarity