1

フードとタグの 2 つのテーブルがあります。food の各行には、対応するタグがあります。これらのタグを使用して各行を出力したい、つまり:

テーブル フード:

ID | 名前

1 | パン

2 | 肉

テーブルタグ:

リファレンス ID | 鬼ごっこ

1 | ベーカリー

1 | 小麦

2 | 牛

望ましい出力は次のとおりです。

{"results": [{"id":"1","name":"bread","tags":["bakery","wheat"]},

{"id":"2","名前":"肉","タグ":["牛"]}] }

これまでのところ、私はこれを持っています:

$db = getConnection();
$stmt = $db->query($sql);//get every column from every food  
$food = $stmt->fetchAll(PDO::FETCH_OBJ);
$tagsSql="select id_reference,tag FROM tags T,food F WHERE F.id=T.food_id_reference";
$stmt = $db->query($tagsSql);  
$tags=$stmt->fetchAll(PDO::FETCH_OBJ);
echo '{"results":' . json_encode($food) . '}';

私はすべての食べ物とこれまでのタグを循環させて一致するペアを見つけることを考えていましたが、私にはかなり重いようです (何千行もある可能性があるという事実を考えると)。何か提案はありますか?

4

1 に答える 1

0

テストされていませんが、このようなものがうまくいくはずです

$db = getConnection();
$stmt = $db->query($sql);//get every column from every food  
$tagsSql="select F.id as id, F.name as name, group_concat(T.tag SEPARATOR ',') as tags FROM tags T,feeds F WHERE F.id=T.feed_id_reference group by feed_id_reference";
$stmt = $db->query($tagsSql);  
for($x = 0; $x < count($tags); $x++){
    $tags[$x]->{"tags"} = explode(",", $tags[$x]->{"tags"});
    echo '{"results":' . json_encode($tags) . '}';
}   
于 2013-07-02T14:17:20.127 に答える