【问题标题】:MySQL database search that returns multidimensional array?返回多维数组的MySQL数据库搜索?
【发布时间】:2014-08-03 12:03:45
【问题描述】:

如果我有一张这样的表:

user | language
-----|---------
john | english
john | french
john | spanish

是否有可以运行的查询以便我返回:

["john"=>["english", "french", "spanish"]]

我试图避免做一些类似的事情:

$john->languages = array();
foreach($results as $row){
    array_push($john->languages, $row["language"]);
}

【问题讨论】:

  • Mysql 不返回“数组”,可以这么说 - 它返回“行” - 出于所有意图和目的,它是一个“数组”,但没有办法获得包含的行其他行 - 或多维数组。你被困在使用 php 从 mysql 返回的一维行中创建一个多维数组。
  • @MarkM,这就是我害怕的。我正要这样做时,我想了一会儿,意识到它的效率非常低,希望有更好的方法。
  • 我不认为这一切都那么低效 - 使用下面的 Fabricator 方法似乎很标准。但是,看看 Barmar 的回答——也许毕竟有办法……

标签: php mysql arrays multidimensional-array


【解决方案1】:

这是常规方式

$user_languages = array();
foreach($result as $row) {
  $user_languages[$row['user']][] = $row['language'];
}

【讨论】:

    【解决方案2】:

    如果你使用 PDO,你可以使用它的FETCH_GROUP 选项:

    $stmt = $db->prepare("SELECT user, language FROM table");
    $stmt->execute();
    $results = $stmt->fetchAll(PDO::FETCH_COLUMN|PDO::FETCH_GROUP, 0);
    

    第三个参数是用于分组的零索引列号。见

    http://www.php.net//manual/en/pdostatement.fetchall.php

    例如。

    【讨论】:

    • 不错的解决方案。 +1。刚刚测试过 - 如果您删除 0 参数 (Reference),它可以完美运行。结果:[['John'] => ['english', 'french', 'spanish']].
    猜你喜欢
    • 2017-11-16
    • 2014-11-11
    • 2011-05-05
    • 1970-01-01
    • 2013-08-29
    • 1970-01-01
    • 2014-04-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多