是否可以选择一些表并将它们插入多维数组?
(我正在使用 PDO fetch_all )
还是我必须进行多次选择?
表格
TABLE xxx
id | xxx | aaa | bbb | ccc
---------------------
1 | 666 | 111 | 222 | 333
2 | 777 | 444 | 555 | 666
TABLE positions
xxx | yyy | zzz
----------------
666 | 999 | 000
666 | 888 | 111
777 | 999 | 000
777 | 888 | 222
777 | 777 | 333
--^ //forenerkey from table xxx
我要实现的是
Array
(
[0] => Array
(
[id] => 1
[aaa] => 111
[bbb] => 222
[ccc] => 333
[xxx] => 666
[positions] => Array(
[0] => Array(
[xxx] => 666
[yyy] => 999
[zzz] => 000
)
[1] => Array(
[xxx] => 666
[yyy] => 888
[zzz] => 111
)
)
)
[1] => Array
(
[id] => 2
[aaa] => 222
[bbb] => 333
[ccc] => 444
[xxx] => 777
[positions] => Array(
[0] => Array(
[xxx] => 777
[yyy] => 999
[zzz] => 000
)
[1] => Array(
[xxx] => 777
[yyy] => 888
[zzz] => 222
)
[2] => Array(
[xxx] => 777
[yyy] => 777
[zzz] => 333
)
)
)
)
atm我是这样选择的
select * from xxx x, position p where x.xxx=p.xxx
但是结果并不如我所愿。顺便说一句,我什至不知道这在 mysql 结果中应该是什么样子 ^^。必须做很多事后工作才能使阵列最终像我想要的那样。其实我已经全部完成了,但我真的很想缩小我的来源 :D
最佳答案
你可以有这个选择
查询
select
x.*,
p.xx as xpositions,
p.yy as ypositions,
p.zz as zpositions
from xxx x
LEFT JOIN (SELECT
xxx,
GROUP_CONCAT(xxx) as xx,
GROUP_CONCAT(yyy) yy,
GROUP_CONCAT(zzz) zz
FROM position
group by xxx) p
on p.xxx = x.xxx
GROUP BY x.xxx;
输出
| ID | XXX | AAA | BBB | CCC | XPOSITIONS | YPOSITIONS | ZPOSITIONS |
|----|-----|-----|-----|-----|-------------|-------------|------------|
| 1 | 666 | 111 | 222 | 333 | 666,666 | 999,888 | 0,111 |
| 2 | 777 | 444 | 555 | 666 | 777,777,777 | 999,888,777 | 0,222,333 |
Fiddle Demo
在php端你可以这样处理
foreach($rows as $row) {
$ID = $row['ID'];
$XXX = $row['XXX'];
$BBB = $row['BBB'];
$CCC = $row['CCC'];
// explode with php
$XPOSITIONS = explode(',',$row['XPOSITIONS']);
$YPOSITIONS = explode(',',$row['YPOSITIONS']);
$ZPOSITIONS = explode(',',$row['ZPOSITIONS']);
for($i=0;$i<count($XPOSITIONS);$i++){
$x_position = $XPOSITIONS[$i];
$y_position = $YPOSITIONS[$i];
$z_position = $ZPOSITIONS[$i];
}
}
关于php - 使用 PDO 将数据选择到多维数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25400199/