【发布时间】:2010-02-04 16:56:56
【问题描述】:
到目前为止,我所看到的一切都是关于自动删除数据库中的重复条目。我想在开头强调数据库中没有重复数据。我还要从这样一个事实开始,即我仍在学习 RDBMS 设计、规范化、关系,最重要的是 SQL!
我有一个客户表,其中包含一个 clientid (PK) 和一个 client_name。我有一个角色表,其中包含一个角色 ID (PK) 和一个角色名称。任何客户端都可以有多个与之关联的角色。所以我创建了一个client_role_link 表,其中clientid 和roleid 作为两个字段。然后我运行这个:
SELECT client.client_name, role.role_name FROM client
LEFT JOIN client_role_link ON client_role_link.clientid=client.clientid
LEFT JOIN role ON client_role_link.roleid=role.roleid
WHERE (role.roleid='1' OR role.roleid='2')
假设我有一个客户端,它有两个与之关联的角色(角色“1”和“2”)。此查询返回两行,每个角色一个。当我得到这些结果时,我正在使用while 循环循环遍历结果并将它们输出到<select> 列表中。然后它会导致两个<option> 列出相同的客户端。
我理解为什么我的查询返回两行,这是有道理的。所以这里有两个问题:
- 我应该使用更好的数据库/表设计还是更优化的查询?
- 或者这是我应该在 PHP 中处理的事情吗?如果是这样,是否有更优雅的解决方案将所有结果添加到数组中,然后循环返回数组并删除重复项?
想法?
【问题讨论】:
-
您到底想用
-
我想只显示具有特定角色的客户并让他们选择。我实际上并不需要在这个特定实例中提取角色名称。
标签: php mysql relationship