【问题标题】:Selecting Data into a Multidimensional array with PDO使用 PDO 将数据选择到多维数组中
【发布时间】:2014-08-20 08:34:53
【问题描述】:

是否可以选择一些表并将它们推送到多维数组中?

(我正在使用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

SQLFiddle

但结果并不如我所愿。顺便说一句,我什至不知道这在 mysql 结果中应该是什么样子^^。必须做很多后续工作才能使阵列最终像我想要的那样。实际上我已经完成了所有工作,但我真的很想缩小我的来源:D

【问题讨论】:

  • 这是怎么来的? positions[1] => Array([xxx] => 777, [yyy] => 999, [zzz] => 000 )
  • 它没有,这是我想要实现的 :) atm 我有严格的选择并用 php 构建这个数组。这只是一个示例数组
  • 但我认为第二个数组是[666,888,111] 而不是[777,999,000]
  • 你是对的,这是一个错字。我已经改变了。但正如我所说,它只是一个示例:)

标签: php mysql sql arrays pdo


【解决方案1】:

你可以有这个选择

查询

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 格式吗?因为我的来源几乎看起来一样...实际上我的 php 有点短。最后我只想缩小我的来源
猜你喜欢
  • 2014-04-09
  • 2012-07-23
  • 2012-06-23
  • 1970-01-01
  • 2019-03-15
  • 2014-03-18
  • 2014-11-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多