Должен ли я иметь lang1, lang2,
lang3 ... и т. д. как строки в 'users'
таблица
Это не очень хорошая идея. Структура таблицы должна быть примерно такой:
user
-------------
| id | .... |
language
-------------
| id | name |
user_language
-------------------------
| user_id | language_id |
Затем, например, чтобы получить выбор языка пользователя, этот фиктивный запрос будет работать:
SELECT language.name as language
FROM user
INNER JOIN user_language ON user_language.user_id = user.id
INNER JOIN language ON language.id = user_language.language_id
WHERE user.id = $id
Это означает, что вы можете обновлять имена языков, и обновление имен будет происходить прозрачно, без необходимости беспокоиться о редактировании его во всех экземплярах пользовательской таблицы. Этот метод также позволяет назначать пользователю столько языков, сколько вы хотите.
EDIT
Возьмем, к примеру, английский и испанский языки (id 1 и id 2), а ID пользователя равен 1. Чтобы связать пользователя с языками:
INSERT INTO user_language (user_id, language_id)
VALUES(1,1); <-- Associate user with English (id 1)
INSERT INTO user_language (user_id, language_id)
VALUES(1,2); <-- Associate user with Spanish (id 2)
Теперь предполагается, что вы заполняете ваши доступные языки значениями в таблице language
, со значением поля language.id
и отображением поля language.name
.