MySQL高级选择语法

时间:2014-06-06 11:36:44

标签: php mysql

我在工作场所被告知,我必须提升我们的电子商店脚本,为用户提供选择所选语言的能力。到目前为止,我们只有一种语言,从现在开始,我们将有4种语言可以扩展。所以我必须设计引擎,轻松地允许添加更多语言并立即使用它们而无需进一步编码。

我正在考虑使用MySQL语法结构来完成我被告知的内容。

我们当前的脚本以:SELECT *开头,这必须改变。现在我想出了这段代码:

"SELECT
id,
name_" . Config::get('current/language') . " as name,
description_" . Config::get('current/language') . " as description,
configurations_" . Config::get('current/language') . " as configurations,
images,
price_" . Config::get('current/language') . " as price,
shipping_" . Config::get('current/language') . " as shipping,
instock,
ready";

我的这个想法背后的原因是我不必改变整个服务,MySQL语法提供了所选择的任何语言,并发送没有语言附加到应用程序的通用名称,因此它将始终工作和良好。然而,asteriks方便的方式是,无论db结构中添加了什么新行,它都可以立即使用而无需任何编码。所以我的问题是,是否可以在所有行提取的语法中保留asteriks但仍然使用上面的代码来处理需要语言附加的字段?类似的东西:

SELECT * (however for field 'name' use this code 'name_" . Config::get('current/language') . " as name')

感谢您的帮助:)

1 个答案:

答案 0 :(得分:2)

我将所有需要翻译的文字放在不同的表格中,并在ID,语言上加入两个表格。

SELECT id, name,description,configurations,images,price,shipping,instock,ready
FROM yourtable
JOIN tablewithtranslations
ON yourtable.id = tablewithtranslations.id 
AND tablewithtranslations.language = " . Config::get('current/language')

JOIN子句将在转换表中选择正确的行。添加新语言只是在翻译表中添加新行。