我可以使用PDO :: FETCH_GROUP将结果按两个值分组
技术问答
133 人阅读
|
0 人回复
|
2023-09-13
|
我正在使用PHP和PDO从数据库检索一组值,然后使用以下代码按第一列进行分组:
: {8 ] |# W0 S" W- J+ Y6 a$result = $sth->fetchAll(PDO::FETCH_GROUP|PDO::FETCH_NUM);) e/ N+ k" V+ |2 ^
这意味着如果我的数据采用以下格式:5 J! x% ^8 T D' y+ B7 s
|Column1 |Column2 |Column3|( P; j/ |: M5 B1 G! ^
|1 |2 |a|- w1 k* v( w6 r+ p2 U* Z0 H' t
|1 |2 |b|
; w1 K6 n' h! O( {/ H6 G* B它返回为:
4 C1 l7 ^* y- s7 F- V# o4 Z0 P1: {
$ t- ]7 B8 R4 I- _: w+ `5 r0 T [Column2: 2, Column3: a],& J9 s3 Z( e! q" I% b9 x
[Column2:2, Column3:b]
& O7 {+ ]1 Y4 D4 p v8 M8 p. R# u }0 O& R/ V9 {9 o( ~! D$ y) f
我将如何按Column1和Column2分组,这样我会得到以下信息:
' b3 U9 E* m: `1: 2 ^$ \0 F! J# O; L/ G O
{
1 C% F: Q7 d2 y" F8 S3 W3 [ 2:7 Y6 S0 [0 a$ Q* Q" s
{
8 k+ ]) I" N4 r0 B, U+ l0 R* K Column3: a,& O l& O2 H% f) F9 K1 z* Y
Column3:b$ u# [. k: o& q' Y
}
* v9 I+ p% v0 l, { }! z8 d8 O5 I F( s. {: k
可以结合使用PDO常数吗?1 \. B; U L0 } Z% z! B
谢谢
: s) ?+ }" I z1 d4 h3 { d9 `! x+ l + i9 P; j2 n/ J$ u
解决方案:( H! _0 `7 t3 p2 x7 s# l9 D
9 ~; y& e: V/ ~3 m- j# ?0 c) j$ F; P+ F; Q: E) T2 h
9 i' K) n& k) ~9 E. E: B' { 如您所见,通过将数组与一个指定的列进行分组,可以轻松地轻松重建数组PDO::FETCH_GROUP。您需要将二维数组(数据库的结果)转换为三维数组,但是/ J; }1 H; K* C, y- V) Q
无法 以这种方式重建它。. E: t% Y% H( t" c
您需要通过嵌套循环手动进行操作。很简单,就像这些:' F4 s; }7 Z, `$ `
// let's assume $result is:
: S# ^2 ^) M/ z) W0 X$result = [
2 f3 U4 d, Y) D4 l [1, 2, 'a'],& b. Z* B# S- F1 ~7 Q
[1, 2, 'b']
9 n3 }/ r$ J! h, [1 K: A];# R1 q1 b& T9 |, l* [
$newResult = [];+ b& @( f2 [* X9 M" t
foreach( $result as $row ) {
6 D Y4 K! f3 k0 I $newResult[$row[0]][$row[1]][] = $row[2];
! b; r6 G- _ R}
* T- X- F% Y" Hvar_dump($newResult);' H7 u8 z" r# J# Y# F$ L: H2 h
它返回:6 u" S9 b7 J2 H! B' |
array(1) { H7 s. u: V k3 _+ J
[1]=> b j9 { W$ \/ K
array(1) {# Y, N1 J& X( p; R$ d' g. j
[2]=>+ q( \4 o/ `5 g' c5 h& R5 Y+ u
array(2) {
+ O5 S* f F8 i) }' f& q) f [0]=>
; E. l& V4 ?; K2 R9 \3 ? string(1) "a"
/ I; N: o9 w7 U* [ [1]=>
4 ^$ E; G9 w; {- e, H string(1) "b"
& ]- F" x/ p& ^4 [! I# K }8 _" w2 O( a* L9 f* R6 B
}
+ _9 j. g7 r$ d3 r7 ?$ h1 u}
5 X- p$ p( s$ B! M# v+ X看起来就像您所需要的。 |
|
|
|
|
|