请问MYSQL条件查询语句如何书写?

表中creator为创建人,field_2为创建人提交的数据。
现要根据条件查询:如果是当前登录账号user查询field_2则显示创建人的field_2(即如果是user=creator,则显示creator的field_2所有数据),如果是admin创建人查询field_2则显示出所有的field_2(即如果是user=admin,则显示所有的field_2数据)。请问应该如何书写SQL语句,谢谢!

img

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 =@参数)