1

groups.id と users.group の間に関連する 2 つのテーブルがあります。

users:

+-- id --+------ email --------+ group +
|   1    | admin@email.com     |  2    |
+--------+---------------------+-------+
|   2    | user@email.com      |  1    |
+--------+---------------------+-------+

groups:

+-- id --+------ name- --------+
|   1    | user                |
+--------+---------------------+
|   2    | admin               |
+--------+---------------------+

通常の選択を使用する場合:

$sth = $pdo->prepare(SELECT * FROM users);
$sth->execute();
var_dump($sth->fetchAll(PDO::FETCH_ASSOC));

私はこのようなものを得ました:

 0 => 
 array (size=7)
  'id' => string '1' (length=1)
  'email' => string 'admin@email.com' (length=15)
  'group' => string '2' (length=1)

 1 => array (size=7)
  'id' => string '2' (length=1)
  'email' => string 'user@email.com' (length=14)
  'group' => string '1' (length=1)

私の質問は、mysql ステートメントを使用して、関連するテーブルから直接データを含む「グループ」内の配列を取得するにはどうすればよいですか? このようなもの:

 0 => 
 array (size=3)
  'id' => string '1' (length=1)
  'email' => string 'admin@email.com' (length=15)
  'group' => array(size=2)
     'id'  => string '2' (length=1)
     'name' => string 'admin' (length=5)


 1 => array (size=3)
  'id' => string '2' (length=1)
  'email' => string 'user@email.com' (length=14)
  'group' => array(size=2)
     'id'  => string '1' (length=1)
     'name' => string 'user' (length=4)
4

1 に答える 1

0

出力構造に追加の深さを作成する利点は想像できません。

JOIN を使用して、実際に必要な列のみを選択してください。値を使用しない場合はgroups.id、選択に追加しないでください。

最終的には、データをフラットな行にパッケージ化して、必要な処理を行うだけです。

$sth = $pdo->prepare("SELECT users.id, users.email, groups.name
                      FROM users
                      JOIN groups ON users.group = groups.id");
$sth->execute();
var_export($sth->fetchAll(PDO::FETCH_ASSOC));
于 2020-12-05T16:15:27.017 に答える