mysql怎么根据传入的参数不同,来执行不同的sql语句啊?

我现在写了两个sql, 按角色来区分,我想根据传入的角色值,一个是admin查询所有的数据,一个是用户查询自己的数据,比如传入一个roleId,怎么来判断,然后执行不同的sql?image.pngimage.png

九九九九九 发布于 2021-12-10 16:58 (编辑于 2021-12-10 17:36)
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共4回答
最佳回答
1
Z4u3z1Lv6专家互助
发布于2021-12-10 17:02

SELECT * FROM 表  WHERE ${IF(roleId=="admin"," 1=1"," 自己的数据")}

  • 九九九九九 九九九九九(提问者) SELECT * FROM 表 , 我相当于是写的两个单独的sql,
    2021-12-10 17:04 
  • Z4u3z1 Z4u3z1 回复 九九九九九(提问者) 除非你是查不同的表(用 linboding的方法),否则就这样简单些。 根据传入的roleId执行不同的where。当roleId为admin 时执行SELECT * FROM 表 WHERE 1=1;roleId不为admin时执行 SELECT * FROM 表 WHERE 自己的数据
    2021-12-10 17:10 
  • 九九九九九 九九九九九(提问者) 回复 Z4u3z1 你看一下我补充了两张图,${if(参数=\'admin\',\"sql1\",\"sql2 \")}, 如果只写一个参数admin,我预览的时候,只能传一个参数,但是我执行sql2的时候,需要一个sql2的参数,来源从哪里获取呢?
    2021-12-10 17:41 
最佳回答
0
北纬六十六度Lv4初级互助
发布于2021-12-10 17:00

你可以加个条件 or admin=admin  跟权限条件并列,会直接让admin查所有数据

最佳回答
0
linbodingLv6中级互助
发布于2021-12-10 17:01(编辑于 2021-12-10 17:28)

${if(参数='admin',"sql1","sql2 ")}

-----

注意sql中的参数写法会有不同;

这个是finereport中可以用的,不是mysql

若是参数在sql中使用可以这样

where username='"+参数名+"'

参数可以用在sql中,和平常的sql一样,只是写法不同

-----------

${if(参数='admin',"sql1","select * from table  

where xxx='"+id+"'")}

  • 九九九九九 九九九九九(提问者) 试了一下可以,但是我自己的参数是写死了的,怎么根据传参来查询啊,比如说,参数!=admin的时候,我要传另外一个参数来执行sql2
    2021-12-10 17:11 
  • linboding linboding 回复 九九九九九(提问者) 看上面,参数在sql2中使用时,可以这样写 where username=\'\"+参数+\"\'
    2021-12-10 17:15 
  • 九九九九九 九九九九九(提问者) 回复 linboding 不是,我现在相当于有两个参数。 一个role,一个id。 当role=admin的时候,执行sql1, 当role=其他的时候,执行sql2。 然后sql2要用另一个参数id。这种怎么写啊?
    2021-12-10 17:23 
  • linboding linboding 回复 九九九九九(提问者) ${if(参数=\'admin\',\"sql1\", \"select * from table where xxx=\'\"+id+\"\'\")}
    2021-12-10 17:28 
  • linboding linboding 回复 九九九九九(提问者) 看上面新的
    2021-12-10 17:31 
最佳回答
0
E8mE1639Lv5见习互助
发布于2021-12-10 17:28

declare @tp int 

set @tp = ${if(参数=="admin",1,0)}

if @tp = 1

  sql语句1

else

  sql语句2

  • 4关注人数
  • 1843浏览人数
  • 最后回答于:2021-12-10 17:36
    请选择关闭问题的原因
    确定 取消
    返回顶部