首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >转换为数组的最佳字符串格式是什么?

转换为数组的最佳字符串格式是什么?
EN

Stack Overflow用户
提问于 2012-04-12 01:16:50
回答 3查看 144关注 0票数 0

我在MySQL中用GROUP_CONCAT生成一个字符串。

我需要为id和name的每一行选择两列,我应该如何格式化查询中的字符串,以便在PHP中以最佳速度生成一个耦合id和name的数组?

例如(我的尝试):GROUP_CONCAT producing

代码语言:javascript
复制
{"id":1,"name":"python"},{"id":2,"name":"ruby"}

然后将其转换为PHP中的数组。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-04-12 01:36:01

我不知道你为什么要这么做。但是这个查询应该是有效的

代码语言:javascript
复制
SELECT * FROM `yourtable` GROUP_CONCAT(
    CONCAT('{"id":"',id,'","name":"',name,'"}') 
    separator ',')
票数 0
EN

Stack Overflow用户

发布于 2012-04-12 01:30:48

您的GROUP_CONCAT()是否生成了JSON字符串?在这种情况下,json_decode($string, true) (PHP docs上的json_decode())将执行此操作。

但这不会比上面的跳蛙建议的速度更快。mysql_fetch_array()将为您解析字符串(使用MYSQL_NUM以避免额外的开销),您还将避免MySQL在GROUP_CONCAT()上的额外时间;

如果您只想在数据库中存储一些JSON数据(这将使将来的搜索和索引变得复杂,但有时当您不想创建大量的DB字段时,这是一个很好的选择,Wordpress一直都是这样做的),您可以在存储之前使用json_encode()json_decode()来检索原始数组/对象。您也可以使用PHP和unserialize(),但我认为JSON更可取,因为您提到了在哪里使用serialize()

票数 1
EN

Stack Overflow用户

发布于 2012-04-12 01:43:44

像这样的东西-

代码语言:javascript
复制
<?php

$db = new PDO('mysql:dbname=test;host=127.0.0.1', 'user', 'pass');
$stmt = $db->prepare("SELECT some_field, GROUP_CONCAT(CONCAT_WS('::', id, name) SEPARATOR '||') AS grp
                      FROM `table`
                      GROUP BY some_field");
$stmt->execute();

while($row = $stmt->fetchObject()) {
    foreach(explode('||', $row->grp) as $pair) {
        $tmp = explode('::', $pair);
        $array[$row->some_field][$tmp[0]] = $tmp[1];
    }
}
print_r($array);

正如safarov所指出的,您需要意识到group_concat_max_len的限制。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10110786

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档