0

在一个简单的语言翻译表中,我想搜索一个 lang1<=>lang2 对。在我的搜索表单中,有 3 个字段可用: 1. 中性文本(条目名称) 2. 语言文本 1 3. 语言文本 2

如果省略了任何字段,则搜索应返回所有内容,但前提是填充的字段 match。该表如下所示:

id | neutral text | language | translation
---+--------------+----------+------------
 0 |       SUBMIT |       en |      Submit
 1 |       SUBMIT |       cs |     Odeslat
 2 |       SUBMIT |       fr |    Démarrer
 3 |          DAY |       fr |        Jour
 4 |       MONDAY |       fr |       Lundi
 5 |       MONDAY |       cs |     Pondělí

我发现很难找出如何只返回匹配的值,但将它们与它们的配对语言相关联(在一个查询中)。我试图根据其他语言的存在来设定条件:

//Executes if only one language value is specified 
SELECT name, lang, content FROM `texty` WHERE name LIKE $neutral_txt AND (content LIKE $l1_val AND lang=$l1 OR lang=$lang2 AND 0 < (SELECT count(*) FROM `texty` WHERE content LIKE $l1_val AND lang=$l1)) GROUP BY name

我还尝试添加GROUP BY语句,希望只name返回相同的值,但当前的方法返回 language2 中的所有条目(前提是至少有一个条目匹配$l1_val)。
我希望查询返回以下内容(使用语言csfr):

Filled fields: neutral text="SUBMIT"
   ->rows 1,2
Filled fields: translation_fr="Démarrer"
   ->rows 1,2
Filled fields: translation_fr="Jour"
   ->rows 3

所以,我只想将找到的值与其他具有相同名称的值配对。指定两种语言或没有指定语言的查询对我来说很好用。

另一种解释:
我有一个具有上述结构的数据库 - 它包含语言名称、条目名称(中性文本)和指定语言的值。我想搜索这个数据库,总是通过 2 种不同的语言翻译(例如:“Odeslat”、“Demarrer”)和条目名称(例如:“SUBMIT”)搜索。
但是可以省略任何搜索要求。我希望搜索也返回与其他语言匹配的所有条目。如上面的例子:

用户在语言“fr”中搜索包含“Démarrer”的翻译,而另一种语言是“cs”。因此返回第 2 行 - 它包含查询。而且,我希望返回第 1 行,以便显示捷克语版本的“Démarrer”。
此查询应用于比较翻译。

4

0 回答 0