在一个简单的语言翻译表中,我想搜索一个 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
)。
我希望查询返回以下内容(使用语言cs
和fr
):
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”。
此查询应用于比较翻译。