MySQL选择多种语言的内容

时间:2011-11-26 18:38:52

标签: php mysql

我有一个用于生成翻译唯一ID的表,名为translations_ids     translation_id(BIGINT)

一个名为translations_entries的翻译表,具有以下结构:     translation_id(BIGINT) - 在translations_ids中的唯一translation_id的记者     表

    lang_abbr (varchar 3)
    table_name (varchar 42)
    translated_text (TEXT)

带语言的表:

    lang_abbr (varchar 3)
    language (varchar 36)
    title (varchar 36)

这是包含此结构的内容(例如新闻)的表格:

id
title (BIGINT) - correspondents to translation_id in translation_entries table
content (BIGINT) - correspondents to translation_id in translation_entries table
author (varchar 36)
date (varchar36)

我试过了:

SELECT *
FROM content LEFT JOIN translations_entries ON (content.title = translation_entries.translation_id AND
content.content = translation_entries.translation_id)
WHERE translations_entries.lang_abbr = 'en';

但是这样,如果内容没有英文翻译,它就不会以默认语言显示

其他方式是:

  1. SELECT * FROM content
  2. Foreach row SELECT * FROM translations_entries WHERE translation_id = this from content AND lang_abbr = 'en'
  3. 检查行是否存在,否则使用默认语言
  4. 的新查询
  5. 获取数据时,从两个表合并数组并显示新闻 但这种方式可能会降低性能
  6. 我的问题是:     从给定语言的表中选择内容的最佳方法是什么,如果该行的语言翻译不存在,则选择内容 默认语言?

1 个答案:

答案 0 :(得分:1)

对不起我的第一个答案,这不是解决方案。试试这个:

SELECT *
FROM content LEFT JOIN (SELECT * FROM translations_entries 
WHERE translations_entries.lang_abbr = 'en') AS te 
ON (content.title = te.translation_id AND
content.content = te.translation_id);