0

私は2つの表の投稿と翻訳を持っています

テーブルポスト

  1. post_id
  2. 投稿内容

翻訳

  1. post_id
  2. 言語
  3. コンテンツ

このデータベースは多くの言語に対応します。利用可能なすべての言語を連続して投稿するための最適なクエリは何ですか?

input
post_id = 2

output 
->single row with this fields

post_id = 2
post_content = 'lorem ipsum'
post_content_en = 'english lorem ipsum'
post_content_jp = 'japanese lorem ipsum'
post_content_...= 'bla..bla..bla..' //the post_content_xx is language international code

group_concat を使用してみました

SELECT a.post_id,GROUP_CONCAT(b.language,'--lang_content_separator--',b.content SEPARATOR '---main_separator---') AS all_languages
FROM posts a 
LEFT JOIN translation b ON a.post_id = b.post_id 
WHERE a.post_id = 2;

上記のクエリは機能していますが、group_concat_max_len を設定する必要があるため、気に入りません。

その group_concat を置き換えるためのトリックまたは代替クエリはありますか?

4

1 に答える 1

0

私のソリューションは改善できると確信していますが、別の方法は、PHP 内で配列をマージすることです。SQL クエリに関しては、クエリを実行できます。クエリの結合は不要のようです。

SELECT post_id, language, content FROM translation WHERE post_id = 2

PHP から、次のコードを使用してデータを取得およびフォーマットできます。

$result = mysql_query($query);

$post = array();
while ($row = mysql_fetch_array($result)) {
    $index = "post_content_" . $row['language'];
    $post['post_id'] = $row['post_id'];
    $post[$index] = $row['content'];
}
于 2012-04-19T04:58:56.343 に答える