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);
|
执行结果:
总结
以上是生活随笔为你收集整理的sqlite库——c语言实现匹配已知字符串中某个字段(该字段在其他表中),在其他表中获取值并显示的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: 函数 —— memset() 将存放字
- 下一篇: C语言 —— 预定义符号__FILE__