2014-04-04 95 views
0

我正在做一個查詢,當管理員用戶使用它時,與普通用戶使用它時(在報表環境中)相比,其行爲有所不同。使用IN進行Mysql查詢並且if-subquery不起作用

當管理員查看時,我希望報表能夠在所有用戶上運行。當普通用戶使用它時,我希望查詢只查看在當前用戶下工作的用戶。

我想使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)) 
) 

(請想象currentUserAdmincurrentUserID是傳遞到含報表查詢存儲過程的參數,那datatable實際上是一些真正的表)

的問題是,MySQL的說「子查詢返回多於一行」。那麼,我會說這是整個想法,因爲我試圖通過IN條款來使用它。

我能做些什麼來使這個查詢工作?

回答

1

爲什麼不加入表格?

 SELECT dt.* ,user.id FROM datatable dt 
    INNER JOIN user ON user.id = dt.user_id 
    WHERE currentUserAdmin = 1 
    Or working_under = currentUserID 
+0

謝謝!我想我是想再線性(PHP).. – Tominator

+0

你歡迎:)! –