2014-06-06 79 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子句將在翻譯表中選擇正確的行。添加新語言只是在翻譯表中添加新行。