mysql - 选择给定字符串的翻译

标签 mysql sql database

我是 SQL 初学者,正在尝试设计一个查询。我使用数据库来存储不同字符串的翻译(在不同产品的 UI 中使用)。

我的数据库包含 4 个表:

  • 字符串(id、名称、lang_id):

“lang_id”是“语言”表中的 FK 引用“id”

  • 复制(ID、名称)

  • 语言(ID、名称)

  • 翻译(id、string_1、string_2):

“string_1”和“string_2”是引用“String”表中“id”的外键。

我的所有表都使用 InnoDB 引擎,除了 Copy 表使用 MyISAM 引擎并在“name”列上包含全文索引。我有触发器来确保“String”表和“Copy”表中的字符串 ID 匹配。

用例:

用户想要将新字符串(尚未在数据库中)从英语翻译为德语。用户希望找到字符串“Login”的引用翻译,以便重用它并保持一致性。

用户提交数据(例如使用网站上的表单):

  • 输入语言:英语
  • 输出语言:德语
  • 字符串:登录

用户想要得到什么:

来自数据库的所有字符串,其中包含单词“Login”及其相应的德语翻译。

到目前为止我所拥有的: 英语语言ID为1, 德语ID为2

SELECT * FROM String s 
JOIN (SELECT id FROM Copy 
      WHERE MATCH (name) AGAINST ('Login')) r 
ON s.id = r.id WHERE s.language = 1

返回所有英文字符串,包含“Login”。

我不知道下一步该怎么做,我想我应该以某种方式将此结果与“翻译”表连接起来。

有人可以引导我走向正确的方向吗?

附注我正在使用 MySQL 5.5(这就是为什么我有这个“复制”表),并且我知道使用搜索引擎来完成此类任务可能会更好,但我想在没有搜索引擎的情况下完成它。

提前谢谢您。

编辑

例如我有:

       String                         Translation               Language
|id| name     | lang_id |     |id| string_1 | string_2 |      |id| name |
-------------------------     --------------------------      -----------
| 1| Good     |    1    |     |1 |    1     |     2    |      | 1| En   |
| 2| Gut      |    2    |     |2 |    4     |     3    |      | 2| De   |          
| 3| Good day |    1    |
| 4| Guten Tag|    2    |     

我搜索“Good”,输入lang“En”,输出lang“De”,想要得到结果:

| Good     | Gut       |
| Good day | Guten Tag |

编辑

sqlfiddle

最佳答案

select il.name, tl.name
from String il
join Translation t on (t.string_1 = il.id)
join String tl on (tl.id = t.string_2)
where (il.lang_id = [id_of_initial_lang]) and 
      (tl.lang_id = [id_of_translated_lang]) and 
      (il.name like '%[searchText]%')
union
select il.name, tl.name
from String il
join Translation t on (t.string_2 = il.id)
join String tl on (tl.id = t.string_1)
where (il.lang_id = [id_of_initial_lang]) and 
      (tl.lang_id = [id_of_translated_lang]) and 
      (il.name like '%[searchText]%')

关于mysql - 选择给定字符串的翻译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30731996/

相关文章:

php - 在使用 ON DUPLICATE KEY UPDATE 和 PHP 时获取 mysql_insert_id()

mysql - 运行rails migration时无法添加外键约束报错

xml - 当节点包含特殊字符时使用 Xquery 处理 XML 标题搜索的最佳方法

php - 如何在 laravel 中进行连接查询

php - 生成唯一 ID

sql - Orient-db 正则表达式修饰符

mysql - 如何从五列中获得三列中的最佳值?

SQL Server : create dynamically queries to select all related data in DB based on entry table and ID

php - 不会从数据库中获取数据

php - MySQL 数据库未填充