【问题标题】:Creating Objects Within Objects from MySQL SELECT从 MySQL SELECT 的对象中创建对象
【发布时间】:2018-07-06 19:30:55
【问题描述】:

我正在使用 PHP 和 PDO 进行这样的基本 SELECT:

SELECT user_id, account, value FROM accounts;

我得到这样的东西:

+---------+---------+-------+
| USER ID | ACCOUNT | VALUE |
+---------+---------+-------+
| 12      | abc     | 12.00 |
| 12      | def     | 98.00 |
| 21      | ghi     | 25.00 |
| 32      | qwe     | 32.00 |
+---------+---------+-------+

我希望它以这种格式保存到数组/对象中:

[12] => Array
    (
       [abc] => "12.00"
       [def] => "98.00"
    )
[21] => Array
    (
       [ghi] => "25.00"
    )
[32] => Array
    (
       [qwe] => "32.00"
    )

这样我以后可以做这样的事情:

$myArray['12']['def'] // "98.00"

我试图想出最有效的方法来处理这个问题。我将有可能拥有 100 或 1000 名用户,每个用户将拥有大约 5-10 个帐户。

我尝试使用fetchAll(PDO::FETCH_GROUP|PDO::FETCH_KEY_PAIR),但这是不允许的。虽然手册上说它们经常一起使用?

欢迎提出任何建议!

【问题讨论】:

  • stackoverflow.com/questions/16846531/…。我会使用它,然后在您想要的设置中构建一个新数组
  • 我想你想要PDO::FETCH_COLUMN|PDO::FETCH_GROUP
  • @AbraCadaver - 这没有提供预期的结果。
  • @Bleach - 我希望有更多与 PDO 相关的解决方案。
  • 链接问题中的答案引用了 PDO::FETCH_ASSOC。这就是我在这里使用的。然后使用该数组构建您的新数组。

标签: php mysql arrays pdo


【解决方案1】:

只需使用一个简单的循环来填充适当的数组元素。

$results = array();
while ($row = $stmt->fetch(PDO::FETCH_ASSOC) {
    $results[$row['user_id']][$row['account']] = $row['value'];
}

【讨论】:

  • 我敢肯定。
  • 再检查一次
  • 这确实符合我的需要。我想得太多了,让它变得比需要的复杂得多。谢谢你,巴尔玛!
【解决方案2】:

将 SQL 代码重写为:-

$sql = "select *
        from accounts
        where user_id in (select distinct user_id
                          from accounts)" ;

【讨论】:

  • WHERE 子句没有区别。
  • 一行怎么能不符合那个条件呢?
猜你喜欢
  • 1970-01-01
  • 2014-01-14
  • 2017-07-14
  • 2021-11-08
  • 2019-05-05
  • 1970-01-01
  • 2013-11-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多