在mysql + pdo中获取数组中的相关列数据

时间:2013-04-27 22:35:03

标签: php mysql pdo

我有2个表,在groups.id和users.group之间相关:

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语句在“group”中获取数组? 像这样:

 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)

1 个答案:

答案 0 :(得分: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));