sqlite库——c语言实现匹配已知字符串中某个字段(该字段在其他表中),在其他表中获取值并显示

问题描述:

1、部分sql语句:select id,name,grouname, poliname;

2、表名:user_resource;用户组表名:usergroup_name;

3、用户所在的用户组名usergroup_name ;

即,需要根据以上条件拼接sql语句:

select id,name,grouname,(select poliname from user_group_resource where name="usergroup_name") as poliname from user_resource;

 

用户表user_resource中的字段有如下所示:

用户组表中的字段如下所示:

 

显示用户user_resource的部分信息(id,name,grouname):

显示用户组user_group_resource的部分信息(id, name, poliname):

 

要求:user_name =》 usergroup_name -》 policy_name一起显示:

已知条件:

1、部分sql语句:select id,name,grouname, poliname;

2、用户表名:user_resource;用户组表名:usergroup_name;

3、用户所在的用户组名usergroup_name ;

即,需要根据以上条件拼接sql语句:

select id,name,grouname,(select poliname from user_group_resource where name="usergroup_name") as poliname from user_resource;

 

实现的函数:

//Add by swj --- 20180719 求出用户名对应的用户的资源名称

char sql[MAX_BUF] = "select id,name,grouname, poliname ";

DEBUG_PRINT("%s\n", sql);

char buf[MAX_BUF] = {0};

strncpy(buf, sql, VALUE_LENGTH);

char cond[MAX_BUF] = {0};

char str[MAX_BUF] = {0};



char *val = strtok(buf, " "); //以空格和,分隔

while(val)

{

//select *,'A' as 'type' from user_resource;

sprintf(cond, " %s", val);

//在策略表中查找用户对应的资源信息 并拼接到sql语句中

if((strcmp(cond, " poliname") == 0) || (strcmp(cond, " poliname,") == 0)) //注意有个空格;poliname字段位置

{

strcat(str, "(select poliname from user_group_resource where name='usergroup_name') as ");

}



val = strtok(NULL, " ");

strcat(str, cond);

}

strcat(str, " from user_resource;");

memset(sql,0,strlen(sql));

strcat(sql,str);

DEBUG_PRINT("%s\n", sql);

 

执行结果:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值