我在MySQL中有两个表:
users
Columns:
1. id
2. username
3. email
4. password
users_roles
Columns:
1. id
2. user
3. role
我将角色保存在这样的数组中:
array(
'1' => 'Carpenter',
'2' => 'Plumber',
'3' => 'Hair Stylist'
)
在搜索表单中,我有上述角色的复选框及其ID。在表单处理脚本中,我有$roles
数组,其中包含已检查的角色。
如何查询数据库以搜索具有Carpenter,Plumber,Hair Stylist角色之一的用户?
更新:这是我提出的查询:
SELECT `users`.`id`
FROM `users`
WHERE
`users`.`id` IN
(
SELECT `user` FROM `users_roles` WHERE `role` IN ( 1, 2, 3 )
)
GROUP BY `users`.`id`
这是实现这一目标的最佳方法吗?或者这是否会导致某些服务器过载?
答案 0 :(得分:1)
表是“用户”(如你所有),user_roles(你有),然后是“user_roles_link”,其中包含user_id和role_id链接两者。
要获取属于特定角色的用户,请从您希望主要从中获取数据的表开始(在本例中为“users”),然后将user_id“加入”user_role_link“表,然后从进入user_role表(由role_id链接)。由role_name限制(WHERE)。
正如兰兹所说,更多的是真正编写整个解决方案 - 但这应该足以让你找到方法。
编辑:当你有位工作时(即JOINS),记得检查索引。关键(连接)很重要,以使它们快速。
答案 1 :(得分:1)
更好的方法是添加一个名为roles
的表表角色
列
然后有另一个表将用户映射到他们的角色
表User_Roles 列
User_Roles表将能够为用户存储多个角色,例如:
User_ID RoleID 1 2 1 4
然后在您的查询中,您可以使用一些joining魔法。虽然我无法提供更详细的答案,但问题相当广泛。