首页 > 解决方案 > 将 2 个表连接在一起并使用基于单独 mysql 查询的 where 函数

问题描述

我正在搭建一个工作培训平台。我已经根据赋予他们的角色为用户创建了接受培训的要求。如果该角色与文档对齐,它将与用户相对。我已经设法完成了大部分工作,但我正在努力寻找在 mysqli 中完成 where 语句的最佳方法。

tbldocfiles 是我的文件列表。我正在查看 docid(可能是与文档关联的多个文件) tbltrainingaccess 设置角色(驱动程序、仓库管理员、客户服务)并显示与 docfiles 中的文档关联的角色(通​​过 id)。tblusertraining 是用户列表以及他们与他们关联的角色。(司机,仓库管理员,客户服务)。

我列出了与用户关联的文档,因此认为以下是最好的方法:

  1. 查看用户以及他/她分配了多少个角色
  2. 查看第 1 点返回的角色(where 函数)
  3. 识别并匹配与用户具有相同角色的文档(Join 功能)
  4. 创建列表,然后查看 docid 的唯一值。(不同的价值)

示例用户 Bri 具有司机和仓库管理员角色。db 中有 5 个文档,其中 3 个与司机角色(docid 1,2,3)相关联,其中 2 个与仓库管理员角色(docid 2,4)相关联,第 5 个文档与客户服务相关联。

我的查询应该这样做:

列出与角色关联的所有文档,这些文档与用户 Bri 1 2 3 2 4 现在从上面的列表中选择唯一值(使用 docid):1,2,3,4。所以我的答案将在最后使用 mysql_fetch_rows 用作计数函数

SELECT DISTINCT tbldocfiles.docid FROM tbldocfiles LEFT JOIN tbltrainingaccess ON (tbldocfiles.docid = tbltrainingaccess.docid) where groupid='1' or groupid='9'

上面的代码有效。但我让自己感到困惑。

where 语句需要是类似于以下查询的结果: select * from tblusertrainingrole where userid='1' (1 将是基于页面选择的变量)

结果将是 1, 9,它们是 groupid 结果。

基本上任何帮助将不胜感激!我相信这会很简单,但我已经为此筋疲力尽了一段时间,这里的大多数答案都有助于加入,但不是 where 语句(我可以找到) 提前谢谢大家!

标签: mysqljoindistinctwhere-clause

解决方案


您可以在 where 中执行 select 语句。由于它是一个 or 语句,因此您可以将其用于结果。请将 * 替换为您需要的值的列名。应该看起来像

where groupid in (select * from tblusertrainingrole where userid = '1')

推荐阅读