在多年的视频解决方案开发中,TSINGSEE青犀视频研发团队碰到过很多对产品有定制需求的项目,我们也会尽力根据用户的需求对产品进行修改。

在EasyDSS的定制项目中,客户提出需求增加标签搜索功能,我们添加该功能后进行测试,发现查询出来的数据与按需求检索的数据不匹配。比如数据库中有以下数据,查询 shared 为 true,并且标签是 “天下” 或者标签是 “爱情” ,应该仅能查询出两条数据,但实际查询出三条数据。

编写测试数据,及测试代码。查询后台发出的数据库命令为:

SELECT * FROM "vod_files"  WHERE (dir_id = 'Cuwb2D2MR') AND (shared = '1') AND (labels like '%爱情;%') OR (labels like '%天下;%') ORDER BY update_at desc LIMIT 10 OFFSET 0

检查此命令,发现命令查询顺序不正确,正确的命令应该如下:

SELECT * FROM "vod_files"  WHERE (dir_id = 'Cuwb2D2MR') AND (shared = '1') AND ((labels like '%爱情;%') OR (labels like '%天下;%')) ORDER BY update_at desc LIMIT 10 OFFSET 0

关键点在于(labels like ‘%爱情;%’) OR (labels like ‘%天下;%’)这一句话,应该添加括号,否则查询的结果就是查询出所有标签是“天下”的数据了。

查看代码,关于 like 的命令为以下代码:

labelArr := estring.ArrayStrToArray(labels)
for _, label := range *labelArr {ors = append(ors, "labels like '%" + label + ";%'")
}

以上代码将所有 like 语句放置在 or 中,因此出现问题,即底层生成的代码为:

db.Where("labels like '%爱情;%'").Or("labels like '%天下;%'")

修改代码如下:

labelArr := estring.ArrayStrToArray(labels)
labelLike := ""
for index, label := range *labelArr {if index > 0 {labelLike = labelLike + " OR "}labelLike = labelLike + "labels like '%" + label + ";%'"
}
if labelLike != consts.EmptyString {wheres = append(wheres, labelLike)
}

该段代码最终生成的代码为

db.Where("labels like '%爱情;%' OR labels like '%天下;%'")

此段生成的代码会将(labels like ‘%爱情;%’) OR (labels like ‘%天下;%’)外侧再添加一段括号,因此正确。

最终测试查询结果为2条数据,解决此问题。以下为返回数据的部分截图,total 为查询到的总数量。

RTMP推流协议视频直播点播平台/人脸识别系统EasyDSS 定制标签检索功能检索数据出错的问题排查相关推荐

  1. RTMP推流协议视频直播点播平台EasyDSS请求时间接口返回的数据打印在前端页面全屏飘红问题解决

    TSINGSEE青犀视频团队接到过很多比较大的项目,这类项目的特点是接入数据量多,处理数据量也大,在对服务器造成负荷的同时,也对程序造成了堵塞. 拿EasyDSS视频直播点播平台举例,一旦EasyDS ...

  2. 新版RTMP推流协议视频直播点播平台EasyDSS在进行视频直播/录像回看时如何创建视频录像计划?

    EasyDSS是TSINGSEE青犀视频开发的可支持接入RTMP推流摄像头的视频流媒体平台,新版EasyDSS互联网直播点播平台支持创建录像计划,用户可以设定周一至周日中,某天某个时间段内开启录像,其 ...

  3. RTMP推流平台/视频直播点播分析平台/人脸识别系统EasyDSS如何实现RTMP负载均衡?

    负载均衡实际上是我们集群的时候提到的一个概念,作为有集群需要的视频直播点播平台EasyDSS,我们在实现多路推流的时候,也需要做到RTMP负载均衡.如何在EasyDSS上实现RTMP负载均衡将是我们在 ...

  4. RTMP流媒体协议互联网直播/点播平台EasyDSS如何使用 ReverseProxy 中断 flv 流达到自动停播的效果?

    关注青犀视频的小伙伴应该知道,我们在其他的博文有提到过EasyGBS可以在演示平台下,设置播放超过三分钟就自动停播的功能,其实在 EasyDSS 开发过程中,我们同样遇到了这种需求:播放一段时间后自动 ...

  5. 【疑难教程】如何解决推流摄像头推RTMP视频流至EasyDSS视频直播点播平台Chrome浏览器无法播放?

    TSINGSEE青犀视频今年上线了和海康合作研发的RTMP推流摄像头,很受用户的支持和信任,RTMP推流摄像头和视频直播点播平台EasyDSS搭配使用能够适用于很多不同的互联网直播.点播场景当中,因此 ...

  6. 推流摄像头推RTMP视频流至EasyDSS视频直播点播平台Chrome浏览器无法播放如何解决?

    TSINGSEE青犀视频今年上线了和海康合作研发的RTMP推流摄像头,很受用户的支持和信任,RTMP推流摄像头和视频直播点播平台EasyDSS搭配使用能够适用于很多不同的互联网直播.点播场景当中,因此 ...

  7. 视频直播点播平台EasyDSS降低视频流直播延迟的2种方法

    视频直播点播平台EasyDSS支持一站式的上传.转码.直播.回放.嵌入.分享等功能,在推流上,可支持手机推流短视频.音乐等音视频文件,提供多种上传方式,支持批量上传.大文件上传.平台视频功能具备超低延 ...

  8. 视频直播点播平台EasyDSS内核无法启动的原因排查与解决

    视频直播点播平台EasyDSS互联网视频云服务经常应用在智慧课堂.在线教育.远程培训.虚拟直播.无人机推流等场景上,平台具备优秀的视频能力,可提供一站式的视频推拉流.转码.点播.直播.时移回放.存储等 ...

  9. EasyDSS视频直播点播平台无法播放4K视频的原因排查与解决

    随着互联网技术的高速发展,视频图像技术也逐渐进步,从360P.480P到720P.1080P.2K再到现在的4K.8K,超高清视频带来的体验自然是以前无法比拟的.正值2022北京冬奥会,据了解,比赛场 ...

最新文章

  1. 开源 免费 java CMS - FreeCMS1.5-建站向导
  2. Python能让你上天?带你挖掘隐藏彩蛋~(附代码)
  3. win10 连接android,win10系统连接安卓手机usb没反应的解决方法
  4. [转]C#中的委托和事件(续)
  5. 顺序、二分查找文本数据
  6. java 放行文件_springmvc中关于静态资源的放行
  7. 当try和finally都包含return时
  8. Android PackageManagerService分析三:卸载APK
  9. 基于OpenGL的贪吃蛇游戏设计与实现
  10. gitlab中创建项目组及项目
  11. 信号调制三种方法的带宽比较
  12. 蒙特卡洛方法(Monte-Carlo Simulation)
  13. 海豚湾,变态的日本银
  14. 【动手学深度学习】(task123)注意力机制剖析
  15. Herman miller Aeron 一代 气压杆(气压棒,气柱)更换笔记(电脑椅中的劳斯莱斯)
  16. 国债期货matlab,Matlab和国债期货的那些事儿~(四)——关键利率法在利率风险管理中的运用...
  17. nginx高效学习方法
  18. Java中出现[Ljava.lang.String的问题
  19. vi和vt的区别小窍门_十大vi技巧和窍门
  20. java 可插拔注解_servlet3.1规范翻译:第8章 注解和可插拔性

热门文章

  1. iconfont在ionic中的使用(阿里图标库)
  2. 【创作赢红包】如何提高写作水平?让写作成为你的强项。
  3. Keil仿真基于虚拟串口VSPD的串口调试(Virtual Serial Port Driver)
  4. 【网络原理7】认识HTTP
  5. 关于Python 的“多元”赋值
  6. 几种常见的开发语言对比
  7. wxFormBuilder + wxPython 工具开发第二章-日记本工具数据连接与展示
  8. JVisualVM工具查看Java堆的情况
  9. java反射获取字段的顺序6_反射之获取字段
  10. Paramiko和MySQL相关-day10