SELECT WHERE CASE语句

时间:2013-04-01 23:57:10

标签: select case where

我正在开发一个项目,根据用户的用户组,用户对记录的访问权限受到限制。我创建了一个全局变量$ usr_sec_group,我想在SELECT语句的WHERE子句中为几个应用程序添加一个CASE语句,该语句根据$ usr_sec_group的值应用不同的过滤器。关于mySQL,我是一个亲戚“新手”,我写这样一个声明的尝试没有奏效。这是基本逻辑:

SELECT 
   field1,
   field2,
   etc
FROM
  Organizations
CASE $user_sec_group
  WHEN 1 THEN 'filter_statement_1'
  WHEN 2 THEN 'filter_statement_2'
  WHEN 3 THEN 'filter_statement_3'
  ELSE 'filter_statement_else'
END CASE
ORDER By
   field1

'filter_statements'可以是任何有效的过滤器,例如

'oName => 'a' AND oName < 'g'

我假设问题是一个相对简单的语法问题,但到目前为止我还没能编写一个有效的CASE语句。

我将不胜感激一些指导!

致以最诚挚的问候,

埃里克

1 个答案:

答案 0 :(得分:0)

您尝试的解决方案不起作用:它不仅仅是语法问题,您还必须使用动态SQL。即使你使用了动态sql,它也不是 管理访问权限的好方法。

更好的方法是在各种访问级别创建特定视图,然后授予对特定用户的适当访问权限并撤消对其他用户的访问权限:

GRANT SELECT ON MyDatabase.viewABC 
    TO 'someuser'@'somehost';