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);

执行结果:

猜你喜欢

转载自blog.csdn.net/weixin_42167759/article/details/81124345