2014-06-06 78 views
0

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

问题即时通讯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结构中的新行已被添加,它都可以立即使用,无需任何编码。所以我的问题是,是否有可能在所有行提取的语法中保留星号,但仍然使用上面的代码来处理需要语言粘贴的字段?喜欢的东西:

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

谢谢所有帮助:)

+0

在生产代码中使用asterix被认为是不好的做法,所以命名您的列并不是您在这里更改的负面因素。另外,你支持的论点是错误的:'db结构中的任何新行都被添加了,它可以在没有任何编码的情况下立即使用。“ - >在查询中没有写入列,是的,但是你需要编码之后再对数据做些什么。 – Konerak

+0

那么这真的没有想过它,所以你说,它是atm的方式是完全好的,我应该保持这种方式? – Mevia

+0

当向网站添加新语言时,您建议的解决方案需要进行主要的表格更改。此外,如果所选语言的产品的细节尚未填充,则它无法回退到默认语言。最好对数据进行规范化处理,并按照@Konerak的建议进行操作。 – Kickstart

回答

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子句将在翻译表中选择正确的行。添加新语言只是在翻译表中添加新行。