我試圖在我的數據庫中進行某種本地化。MySQL簡單本地化
例如,我有3個表格(圖1)。語言表包含不同的語言。本地化表有3個字段:「id」 - 字符串的id,'language' - 字符串的語言(id和language是我的主鍵),'value' - 本地化的字符串。 tableOne具有'id','Col1'和'Col2' - 這些字段包含可本地化字符串的ID。
所以在本地化後,我希望得到一個綠色的表格而不是原來的(取決於語言參數)。
我已經做到了這一點,它的工作原理,但我想知道是否有其他更好的方法來做到這一點,因爲現在我必須創建INNER JOIN塊,每個列必須進行本地化。我只是害怕它會非常緩慢。 我試着創建一個臨時表來選擇所需語言的所有記錄,然後我也這樣做了。內部連接,但只能在一種語言的記錄中執行搜索。但它不工作,因爲我仍然不得不使用多個內部聯接與臨時表,這是不可能的。
SELECT
`One`.`id` AS 'id',
`loc1`.`value` AS 'Col1',
`loc2`.`value` AS 'Col2'
FROM
`tableOne` AS `One`
INNER JOIN
`localization` AS `loc1`
ON `loc1`.`id` = `One.Col1`
AND `loc1`.`language` = 'en'
INNER JOIN
`localization` AS `loc2`
ON `loc2`.`id` = `One.Col2`
AND `loc2`.`language` = 'en'
圖1
我覺得這個問題非常廣泛,也可以基於意見(因爲人們對於如何處理這個問題可能有不同的看法)。你有特定的問題嗎?你說你有什麼工作,所以我不確定你在問什麼。 – AdamMc331
@ McAdam331,我想避免多個內部聯接,至少能夠使用此解決方案(內部聯接,但搜索應該只在一種語言的記錄之間執行。但它不工作,因爲我仍然不得不使用多個內部聯接與臨時表,這是不可能的)。或者,也許還有一些方法可以通過匹配表'localization'中的值來替換'tableOne'的值。 – FiftyStars
是的,您需要加入需要本地化的每一列。您很可能會看到將languages.id(和localization.language)更改爲INT的效果會更好,如果您需要這些2個字符的語言代碼,請將它們作爲語言表中的單獨字段保留。 – Uueerdo