2016-05-26 5 views
1
から

をPHPの配列を作成し、私はGROUP_CONCATを使用してMySQLのクエリからデータを取得:MySQLのGROUP_CONCAT

GROUP_CONCAT('id => ',assignments.userid,', assigned => ',assignments.assigned SEPARATOR ';') as assigneeids 

そして、PHPの配列に変換しようとしています。

$assignees = explode(';', $ticket['assigneeids']); 
foreach($assignees as $assignee) { 
    echo "$assignee\n"; // $assignee['id'] outputs 'i' 
    echo gettype($assignee) . '\n'; 
} 

残念ながら、$assigneeは配列ではなく文字列になります。出力:

id => 1001, assigned => 1419648601 
string 
id => 1002, assigned => 1419649207 
string 

私は間違っていますか?

+0

は次のように評価されるためには、SQLクエリからPHPコードを生成しようとすると、それを期待しているINGの行う必要がありますPHP?それは 'eval()'なしでは動作しませんが、これはこれに近づく方法ではありません。あなたの目標は、サブ配列 'array( 'id' => 1234、 'assigned' => 987654)'を含む2D構造の配列を生成することであることを明確にできますか? –

+0

はい、これは私の目標です。 –

+0

ソーステーブルのサンプルを投稿できますか?通常のフェッチループでは単純なクエリが必要になりますが、配列操作は少ししか必要ありません。このGROUP_CONCAT()は大規模なクエリの一部ですか、それともクエリによって返されたのはそれだけでしたか? –

答えて

2

これを配列ではなく文字列に連結します。このようなことをするのが良いのではないですか?

GROUP_CONCAT(assignments.userid,'_',assignments.assigned SEPARATOR ';') as assigneeids 

フェッチしたら、あなたはいくつかのexplode()は「魔法

$assignees = explode(';', $ticket['assigneeids']); 
foreach($assignees as $assignee) { 
    list($id, $assigned) = explode("_", $assignee); 
    echo "$id\n"; 
    echo gettype($assigned) . '\n'; 
} 

Example/Demo

+0

これは完璧に機能しましたが、これは少し汚い回避策ではありませんか? =) –

+0

@AlexGあなたは既にその道にいたので、ちょっと(*ちょっとした*)ではありません!配列を作成したいので、 'eval()'を実装するほうが危険です。 PHPがあなたの大胆な作業をさせてください! ; P – Darren

+1

私はちょうど新しいことを学びました。私はあなたが 'GROUP_CONCAT'に複数の式を置くことができるとは気づきませんでした。私はいつも 'GROUP_CONCAT(CONCAT(x、y、z))'を書いています – Barmar