gpt4 book ai didi

php - 规范化数据库搜索查询

转载 作者:行者123 更新时间:2023-11-29 06:58:42 24 4
gpt4 key购买 nike

我在 MySQL 中有两个表:

用户

Columns:
1. id
2. username
3. email
4. password

用户角色

Columns:
1. id
2. user
3. role

我将角色保存在这样的数组中:

array(
'1' => 'Carpenter',
'2' => 'Plumber',
'3' => 'Hair Stylist'
)

在搜索表单中,我有上述角色及其 ID 的复选框。在表单处理脚本中,我有一个包含选中角色的 $roles 数组。

如何查询数据库以搜索具有木匠、水管工、发型师等角色之一的用户?

更新:这是我提出的查询:

SELECT `users`.`id` 
FROM `users`
WHERE
`users`.`id` IN
(
SELECT `user` FROM `users_roles` WHERE `role` IN ( 1, 2, 3 )
)
GROUP BY `users`.`id`

这是实现这一目标的最佳方式吗?还是这一定会导致某些服务器过载?

最佳答案

表是“user”(如您所拥有的)、user_roles(如您所拥有的),然后是“user_roles_link”,其中包含链接两者的 user_id 和 role_id。

要获取属于特定角色的用户,请从您要主要从中获取数据的表(在本例中为“用户”)开始,然后将 user_id“加入”到 user_role_link 表,然后从将其放入 user_role 表(由 role_id 链接)。通过 role_name 限制(WHERE)。

正如 lanzz 所说,更多的是真正编写整个解决方案 - 但这应该足以让您制定出该方法。


编辑:当你已经开始工作时(即 JOINS),记得检查索引。关系(连接)很重要,可以使它们变快。

关于php - 规范化数据库搜索查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11282001/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com