表中creator为创建人,field_2为创建人提交的数据。
现要根据条件查询:如果是当前登录账号user查询field_2则显示创建人的field_2(即如果是user=creator,则显示creator的field_2所有数据),如果是admin创建人查询field_2则显示出所有的field_2(即如果是user=admin,则显示所有的field_2数据)。请问应该如何书写SQL语句,谢谢!
SELECT * FROM table_name WHERE creator LIKE IF ( "creator" = "admin", "%", "creator" )
如果是admin 就 通过like 模糊查询所有,不是的话就查询creator
creator:就是查询参数
就是判断管理员查询所有记录,非管理员只查询自己的记录吧
select * from table where 'admin'=#{user} or ('admin' != #{user} and user =#{user})
说实话,我建议在mybatis动态sql上解决就好了
select * from table
<where>
<if test="user!='admin'">
user =#{user}
</if>
</where>
表名是什么,或者说有几个表。一个表就直接查询两个表就会连接查询
假设你现在传入的是user_id,user_id和creator所在表是user,这个creator和field_2数据在user_field表
$user_id=1;
$sql='SELECT * FROM user_field WHERE CASE WHEN ((select creator from user where id="'.$user_id.'") != admin or (select creator from user where id="'.$user_id.'") is null) THEN creator = (select creator from user where id="'.$user_id.'") ELSE 1=1 END;';
这样当user_id的creator=admin时,展示所有,其它展示自己的
select * from table_name a where if(a.creator=#{user},a.m_order=#{user},1=1)
我自己测试了一下是可以的
这种根据权限限制查询不同范围的数据,这种查询逻辑一般不会写在SQL中。
正确的做法是,在你的业务层,根据用户得到用户权限,如果是一般用户,使用SQL1:带有creator=currUser这样的条件;如果是admin用户,则不带上creator=currUser。如果你的框架比较高级的话,使用mybatis这样的ORM框架,就是人们常说的动态SQL。
select的语法咯,学命令好点,别看图形化
select * from table_name
where concat('admin',creator) like '%your_user%'
如果管理员是固定的
select field_2 from tableName where creator=@参数
union
select field_2 from tableName where 'admin'=@参数
如果管理员有多个,那么必然有个标志
select field_2 from tableName where creator=@参数
union
select field_2 from tableName where existis (select 1 from tb where 标志='' and creator =@参数)