0

MySQL で GROUP_CONCAT を使用して文字列を生成しています。

ID と名前の行ごとに 2 つの列を選択する必要があります。最適な速度で PHP で ID と名前を結合する配列を生成するには、クエリで文字列をどのようにフォーマットすればよいですか?

例(私の試み):GROUP_CONCATの生成

{"id":1,"name":"python"},{"id":2,"name":"ruby"}

次に、これを PHP の配列に変換します。

4

3 に答える 3

1

GROUP_CONCAT()JSON 文字列を生成していますか? その場合、 ( PHP docsjson_decode($string, true)のjson_decode() ) がそれを行います。

しかし、それは上で提案した The Jumping Frog のように行うよりも速くはありません。mysql_fetch_array()文字列を解析し (MYSQL_NUM余分なオーバーヘッドを避けるために使用します)、MySQL の余分な時間を回避しますGROUP_CONCAT()

JSON データを DB に保存したいだけの場合 (これは将来の検索とインデックス作成を複雑にしますが、大量の DB フィールドを作成したくない場合には良い選択です。Wordpress は常にそれを行います)、その目的のために元の配列/オブジェクトをjson_encode()格納する前に使用して取得することができます。PHPとjson_decode()を使用することもできますが、Javascript を使用する場所について言及したので、JSON が望ましいと思います。serialize()unserialize()

于 2012-04-11T17:30:47.633 に答える
1

このようなもの -

<?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 の制限に注意する必要があります。

于 2012-04-11T17:43:44.250 に答える