2017-06-25 26 views
-1

我正在做一個多維數組,其中包含用戶和他們創建的組多維數組,我有兩個表的用戶和組,我設法讓一個數組,我想武官另一個數組讓它變得多維,我需要幫助。 這是我所:使從MySQL通過PHP

$sqlusers = $db->query("SELECT * FROM users"); 
$users = array(); 
WHILE($user = mysqli_fetch_array($sqlusers)) 
{ 
    $users[] = array(
     "userName" => $user['name'], 
     "userPhone" => $user['phone'] 
    ); 

    $uid = $user['id']; 
    $sqlgroup = $db->query("SELECT * FROM groups WHERE adminId = '$uid'"); 
    $groups = array(); 
    WHILE($group = mysqli_fetch_array($sqlgroup)) 
    { 
     $groups[] = $group['groupName']; 
    } 
} 
print_r($groups); 
?> 

我需要的結果是這樣的:

Array ( 
     [0] => Array ( 
         [userName] => Bebe Claudette 
         [userPhone] => 185022455 
         [userGroup] => Array (
              [groupName] => TestGroup1 
              ) 
        ) 
     [1] => Array ( 
         [userName] => MUHIRWA Clement 
         [userPhone]=> 0785432238 
         [userGroup] => Array (
              [groupName] => TestGroup2 
              ) 
        ) 
    ) 
+0

是否userGroup表示含有較多的組名? – cirosomma

+3

您的接受記錄值得懷疑。 –

+0

@miclen我它含有較多的組名 – Clement

回答

1

用於連接查詢,得到的結果爲2臺。嘗試是這樣的(未測試):

SELECT u.*, g.* FROM users as u INNER JOIN groups as g ON u.id = g.adminId; 

現在,如果你遍歷你的結果,你會從2個表有數據。

+0

如果你要去用這個方法(和我有機會,所以我知道它的工作原理),它指定將如何檢測左行的變化是非常重要的表,例如在這種情況下行的組部分屬於哪個用戶。我認爲你應該編輯你的答案來證明這一點,否則你最終可能導致人們誤入歧途。 –

0

您還沒有明確說明爲什麼上面不工作,但我會繼續前進,假設它是因爲你嵌套一個查詢的另一個獲取階段內(而不是僅僅是你忘了在你構建groups數組後,爲當前'user'設置'groups'成員,你在上面的代碼中使用btw!)

這裏有幾個選項可以用在這裏,但最安全的就是展開這兩個 - 獲取所有用戶,然後對用戶進行foreach並設置組。例如:

$sqlusers = $db->query("SELECT * FROM users"); 
$users = array(); 
WHILE($user = mysqli_fetch_array($sqlusers)) 
{ 
    $users[] = array(
     "userID" => $user['id']; 
     "userName" => $user['name'], 
     "userPhone" => $user['phone'] 
    ); 
} 
foreach ($users as $i => $user) { 
    $groups = array(); 
    $sqlgroup = $db->query("SELECT * FROM groups WHERE adminId = '$user['userID']'"); 
    WHILE($group = mysqli_fetch_array($sqlgroup)) 
    { 
     $groups[] = $group['groupName']; 
    } 
    $users[$i]['userGroups'] = $groups; 
} 
print_r($groups); 

注意,我還建議使用一個事先準備好的聲明,併爲第二個查詢參數的位置 - 我只是重複你上面寫的是什麼,以使其更清晰我做了什麼樣的變化。但是,是的,即使這只是一個整數數據庫字段,也必須使用準備好的語句 - 這是一個很好的習慣。

+0

感謝喬恩Kloske,這幾乎工作,但現在所有用戶都具有相同的團體,(其中id = ..)不工作 – Clement

+0

爾加!對不起,uid部分應該是$ user ['id'],並且應該隱藏在原始的東西里......如果最後一個數組中包含用戶標識,你是否關心它?我會在tic中更新答案。 –

+0

好的,現在就試試。如果你需要數組不包含userID元素,你可以在第二個循環結束時做到這一點:只需取消設置($ users [$ i] ['userID']); –