MySQL で GROUP_CONCAT を使用して文字列を生成しています。
ID と名前の行ごとに 2 つの列を選択する必要があります。最適な速度で PHP で ID と名前を結合する配列を生成するには、クエリで文字列をどのようにフォーマットすればよいですか?
例(私の試み):GROUP_CONCATの生成
{"id":1,"name":"python"},{"id":2,"name":"ruby"}
次に、これを PHP の配列に変換します。
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()
このようなもの -
<?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 の制限に注意する必要があります。