当管理员用户使用该查询时,与常规用户使用该查询时(在报告环境中),我的查询行为会有所不同。
当管理员查看时,我希望报告在所有用户上运行。当普通用户使用它时,我希望查询只查看在当前用户下工作的用户。
我试图制作1个报告,所以1个查询,结合了两个方面。我的猜测是这样的:
SELECT * FROM datatable dt WHERE dt.user_id IN (
IF (currentUserAdmin = 1, (SELECT id FROM user), (SELECT id FROM user WHERE working_under = currentUserID))
)
(请设想currentUserAdmin
和currentUserID
是传递给包含报表查询的存储过程的参数,而datatable
实际上是一些真正的表格。
问题是mysql说"子查询返回超过1行"。好吧,我说的是整个想法,因为我试图用IN
条款来使用它。
如何使此查询有效?
答案 0 :(得分:1)
为什么不加入这些表?
SELECT dt.* ,user.id FROM datatable dt
INNER JOIN user ON user.id = dt.user_id
WHERE currentUserAdmin = 1
Or working_under = currentUserID