sqlite库——c语言实现匹配已知字符串中某个字段(该字段在其他表中),在其他表中获取值并显示
問題描述:
1、部分sql語句:select id,name,grouname, poliname;
2、表名:user_resource;用戶組表名:usergroup_name;
3、用戶所在的用戶組名usergroup_name ;
即,需要根據(jù)以上條件拼接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 ;
即,需要根據(jù)以上條件拼接sql語句:
select id,name,grouname,(select poliname from user_group_resource where name="usergroup_name") as poliname from user_resource;
?
實現(xiàn)的函數(shù):
| //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); ? |
執(zhí)行結果:
總結
以上是生活随笔為你收集整理的sqlite库——c语言实现匹配已知字符串中某个字段(该字段在其他表中),在其他表中获取值并显示的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 函数 —— memset() 将存放字
- 下一篇: C语言 —— 预定义符号__FILE__