2011-03-28 41 views
0

我正在從包含文件元信息的單個表中讀取行。其中一列acl包含映射到(不受限制,受限制或私有)的標誌(0,1或2)。我想創建一個SELECT查詢,它將基於兩個PHP變量$ userId和$ isAdmin返回文件數據。的邏輯如下:MySQL SELECT:根據同一個表中的列值返回多個列

  • 返回文件信息行如果ACL = 0而不管$用戶id或$ isAdmin值
  • 返回文件信息行如果ACL = 1和$ isAdmin是TRUE
  • 返回文件信息行if acl = 2 IF $ userId = fileownerid(其中fileownerid是存儲上傳文件的所有者的ID的表中的列)

所以基本上我在桌子上做查詢只返回用戶可以看到的行

我試過在子查詢中使用各種CASE和IF語句,但無法解決它。開始的事情是不可能的,沒有在PHP中處理SQL結果。

任何大師看到一種方式?

回答

1

select * from file where (acl = 0) or (acl = 1 and ? = 'TRUE') or (acl = 2 and ? = fileownerid) 然後綁定isAdmin和用戶ID給變量1和2

+0

乾杯保羅......這麼多簡單的話,我想;有時候你看不到樹林裏的樹林! – RolandFlyBoy 2011-03-28 16:47:17

0

我覺得這樣的事情應該做的工作:

$qry = 'SELECT * FROM yourtable 
WHERE (acl = 0) 
OR (acl = 1 AND '.$isAdmin.') 
OR (acl = 2 AND '.$userId.' = fileownerid)'; 
相關問題