什麼你想在這裏實現是一個一對多的關係,即每個國家可以有多個語言環境。這無法用單個表格實現,因爲您會發現多次出現同一個國家/地區。你應該做的是將數據分成兩個表格。你可以在下面找到一個例子。
結構Countries表
- ID INT,自動遞增,主鍵
- 名稱VARCHAR
結構,語言環境表
- CountryID整型,主鍵
- 的LocaleID INT,主鍵
- 名稱varchar
處理INSERT - 要插入國家表格,只需填寫姓名字段(或您可能需要的任何其他字段):
INSERT INTO Countries
(Name)
VALUES
('Ireland')
ID字段將自動填充。對於這個例子,我們可以想象「愛爾蘭」的ID = 1。
- 要插入語言環境,您需要傳遞三個值,即CountryID,LocaleID和Name。
INSERT INTO Locales
(CountryID, LocaleID, Name)
VALUES
(1, 1, 'Lorem')
此查詢會爲ID = 1(即愛爾蘭)和'Lorem'作爲名稱的國家插入LocaleID。要插入「存有」,你會做相同的:
INSERT INTO Locales
(CountryID, LocaleID, Name)
VALUES
(1, 2, 'Ipsum')
哪裏的LocaleID將是2,對國家與ID = 1和名稱將是「存有」。
如何檢索數據
由於現在數據在兩個表拆分,你將不得不使用一個加入把它在一起。這很簡單:
SELECT
C.ID AS CountryID
,L.Name AS CountryName
,L.LocaleID
FROM
Countries C
LEFT JOIN
Locales L ON
(L.CountryID = C.CountryID) AND
(L.LocaleID = :InputLocaleID)
就是這樣。現在,如果存在,您的查詢將返回國家與它的名稱在適當的區域設置。如果沒有,CountryName和LocaleID將爲NULL。
更新2012年8月11日 - 如何如果你想使用一個表的國家使用一個表(不推薦)
,你必須手動處理的國家標識。也就是說,您將執行INSERT,如下所示:
INSERT INTO Countries
(ID, LocaleID, Name)
VALUES
(:CountryID, :LocaleID, :Name)
但是,這會給您帶來問題。想象一下,表格中包含的國家數量未指定,您必須添加一個新的國家。你會給這個新國傢什麼ID?
你爲什麼要不同的區域有標識,使有關多大意義爲具有相同的客戶數量的不同customners。什麼時候ID改變,如果它不是一個唯一的標識符,它是什麼? – 2012-08-10 23:19:04
@Tony Hopkinson:我想成爲ID + LOCALES_ID一個唯一的標識符。我想這是因爲用戶選擇了哪個國家,例如「美國」。如果另一個用戶瀏覽網站的地區fr_FR(法語),我需要向其展示'美國國家統計局'。通過這種方式,我總是保存user.country_id = countries.id,當顯示時我可以做'SELECT u.name,c.name FROM users u LEFT JOIN countries c ON u.country_id = c.id AND c.locales_id = 「2''。我需要這個網站的多個部分,所以有這個我如何描述它對我非常有用。謝謝! – udexter 2012-08-10 23:26:36