我有以下问题:我正在创建一个表单来在应用程序上注册用户,在不同的输入类型中,有几个关于用户说话语言的复选框。现在,由于用户可能只会说一种语言,我想知道如何在数据库中处理?我应该将lang1,lang2,lang3 ......等作为'users'表中的行吗?
答案 0 :(得分:2)
我应该有lang1,lang2, lang3 ...等''用户'中的行 表
这不是个好主意。表结构应该是这样的:
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
这意味着您可以更新语言名称,名称更新将透明地进行,而无需担心在用户表的所有实例中进行编辑。此方法还允许您为用户分配任意数量的语言。
修改强> :
例如,如果语言是英语和西班牙语(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
,字段显示为{{1 }}
答案 1 :(得分:0)
我自己是Zend的新手(我是四年级的BSC学生),但这就是我要做的。
我会创建一个相关的表,例如speaksLanguages在users表中有多行,大多数将为null在我看来永远不是一个好主意,在保存用户时将应用程序重定向到speaksLanguages控制器createAction()并保存那里的用户语言。
您需要创建一个会话以在重定向中保留新用户。
我再次对此不熟悉,但我使用这种逻辑做了类似的事情。