Php 在mysql+pdo中获取数组中的相关列数据
我有两个表,与groups.id和users.group相关:Php 在mysql+pdo中获取数组中的相关列数据,php,mysql,pdo,Php,Mysql,Pdo,我有两个表,与groups.id和users.group相关: users: +-- id --+------ email --------+ group + | 1 | admin@email.com | 2 | +--------+---------------------+-------+ | 2 | user@email.com | 1 | +--------+---------------------+-------+ grou
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)
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)
我的问题是,如何使用mysql语句直接从相关表中获取包含数据的组内数组?
大概是这样的:
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)
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)
我无法想象在输出结构中创建额外的深度会有什么好处 只需使用连接,即可选择实际需要的列。如果不打算使用groups.id值,则不要将其添加到select 最终,只需将数据打包成平铺的行,然后继续进行所需的任何处理
$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));
@jsalonen但是,使用left join,我在数组中的同一lvl上获得了组表,而不是在组内。keyMysql将始终返回扁平行,因此不可能使用mysql语句直接获得多级数组。您必须用php创建子数组。您所能做的最接近的事情就是从mysql中的一个连接中收集所有与组相关的信息,并在php中分解每一行。@piotrm好吧,这就是我想象的,谢谢