0

我有 2 个表帖和翻译

桌柱

  1. post_id
  2. post_content

翻译

  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 回答