2017-06-25 9 views
-1

私は多面的な配列を作っていますが、これはユーザーとグループを含んでいます。私は2つのテーブルとユーザーグループを持っています。それを多次元にするために、私は助けが必要です。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にはさらにgroupNameが含まれていますか? – 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

あなたは上記がうまくいかない理由を明示していませんが、別のフェッチフェーズで1つのクエリをネストしているので、前提とします。あなたが上記のコードbtwで行ったグループ配列を作成した後、現在の 'ユーザー'の 'グループ'メンバーを設定してください)

ここではいくつかのオプションを使用できますが、 2つはすべてのユーザーをフェッチし、次にユーザーを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); 

注、私はまた、第2のクエリのために準備された文と位置パラメータを使用することをお勧めします - 私はちょうどあなたが私が作ったものの変更、それをより明確にするために、上記の書いたものを繰り返しています。しかし、そうです、たとえこれが単なる整数型データベースフィールドであっても、準備されたステートメントを使ってください - それは良い習慣です。

+0

ありがとうございましたJon Kloske、これはほぼ成功しましたが、今ではすべてのユーザーが同じグループを持っています(id = ..)は動作していません – Clement

+0

Gah!申し訳ありませんが、uidパーツは$ user ['id']でなければなりません。元のものに隠されていなければなりません...最終的な配列にユーザIDがあれば気になりますか?私はチックで答えを更新します。 –

+0

さて、やってみてください。配列にuserID要素が含まれていないようにするには、2番目のループの最後にそれを行うことができます:unset($ users [$ i] ['userID']); –