name
テーブルがあると仮定すると、GROUP_CONCAT
機能を使用します。
SELECT questions.*,
GROUP_CONCAT(DISTINCT tags.name -> ORDER BY tags.id SEPARATOR ',') AS `tag_names`,
GROUP_CONCAT(DISTINCT tags.id -> ORDER BY tags.id SEPARATOR ',') AS `tag_ids`
FROM questions
RIGHT JOIN tags
ON questions.id = tags.question_id
これは、値がカンマで区切られたであろう2カラムtag_names
とtag_ids
を示すであろう。値を取得すると、それを分解して実際の値を得ることができます。
今
while($row=mysql_fetch_assoc($result)){
$tag_names = explode("," $row['tag_names'];
$tag_ids = explode("," $row['tag_ids'];
$tags = array_combine($tag_ids, $tag_names);
}
$tags
そのキーがタグIDと値がタグ名である関連した配列となります。
次の式を使用すると、JSONが作成されます。しかし、あなたのタグ名をエスケープする必要が任意の文字(例えば"
)
Concat('{', GROUP_CONCAT(Concat('"', tags.id, '":"', tags.name, '"')
ORDER BY
tags.id), '}') AS `tag_o`
を持っている場合は、それに頼ってはいけない$tags = json_decode($row['tag_o']);
あなたのタグテーブルは、質問テーブルとタグテーブルの間に多対多ですか? – nnichols