回答

收藏

我可以使用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看起来就像您所需要的。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则