当前位置: 首页 > news >正文

网站建设业务培训辽宁城乡建设集团成立网站

网站建设业务培训,辽宁城乡建设集团成立网站,自己注册的公司怎么报税,影响搜索排名的核心因素有哪些?不知道你有没有使用过Mysql的like语句#xff0c;进行模糊查询#xff1f;不知道你有没有将查询结果#xff0c;进行分页处理#xff1f;模糊查询#xff0c;加上分页处理#xff0c;会有意想不到的坑#xff0c;不信我们继续往下看。我之前提供过一个品牌查询接口…不知道你有没有使用过Mysql的like语句进行模糊查询不知道你有没有将查询结果进行分页处理模糊查询加上分页处理会有意想不到的坑不信我们继续往下看。我之前提供过一个品牌查询接口给前端品牌选择控件使用的。当时为了性能考虑怕前端控件因为一次性加载太多的品牌而导致页面卡死。因此对品牌查询接口做了分页处理。刚开始品牌表的数据比较少没有出现什么问题。后来产品加需求了在品牌下拉选择控件中让用户可以输入自定义品牌。在用户添加品牌前需要先查一下如果该品牌存在则使用已有品牌。如果不存在则新增品牌。这里是精确匹配这个需求很简单很容易实现了。后来产品又加需求了需要按名称模糊查询品牌。该功能上线后使用了很长一段时间也没啥问题。突然在不经意的某一天这个功能却出问题了。到底怎么回事呢1.案发现场某一天下午运营找到测试反馈一个问题说明明品牌苏三已经存在了但用户输入关键字苏三时系统没有让用户直接选择已有品牌而是添加了一个叫苏三的自定义的品牌。我过去一看还真的有问题。不一会儿就定位到原因了初步判断是分页的问题。搜索关键字苏三竟然出现了好几页的数据把我惊呆了品牌表怎么多了这么多数据了。我查了数据库其实数据量并不是特别多但有些品牌名称比较特殊有些品牌名称是多个品牌名称拼接而成的比如苏三,李四 或者 苏三,李四,王五这是一个品牌。其实是品牌名称建的不规范导致的问题但已经没法让运营修改品牌了只能通过技术手段解决目前的问题。查询第一页的数据sqlselect * from brand where name like %苏三%  order by edit_date desc limit 5;执行结果我们可以看到图中并没有等于苏三这两个字的数据。注意为了好演示这里给的每页大小是5真实的场景并非如此。查询第二页的数据sqlselect * from brand where name like %苏三%  order by edit_date desc limit 5,5;执行结果从图中看到在第二行出现了正好等于苏三这两个字的数据。用户搜索关键字苏三 时前端页面在调用品牌查询接口pageNo默认是1。由于能够匹配关键字的数据太多了第一页返回不完需要多页才能全部返回。前端获取到第一页的数据后跟关键字苏三 做比较发现没有等于苏三的品牌。这样就会在下拉控件中自动添加一个品牌苏三同时在右边增加自定义标签。这样就出问题了明明苏三这个品牌是有的但用户还能自定义一个苏三而不是直接选择。2.思考123苏三这个关键字通过模糊查询可以查询出来但由于品牌接口做了分页全匹配的品牌苏三出现在第二页了才导致问题的产生。如果要解决这个问题让它出现在第一页不就OK了这时候就有下面几种解决方案。2.1 方案1分页查询品牌接口pageSize是5。我们为什么不把pageSize调大一点比如改成200、500等。这样通过苏三关键字进行模糊查询的时候结果基本都在第一页。这样就能非常快速的解决问题。但有个缺点就是如果这次调大了pageSize但后面查询关键字的品牌又出现在第二页怎么办不可能一直改pageSize吧2.2 方案2把分页查询接口的数据拆分成两部分精确查询模糊查询在代码中做处理的时候先根据关键字精确查询即sql中使用name苏三这种方式查询一次数据。如果没查出数据则再直接用like %苏三进行模糊查询。如果查出了一条数据则把它放在返回结果集合中的第一位置。接下来使用like %苏三进行模糊查询的时候再加上条件 name 苏三。将查出的结果从第二个位置往后放。这样可以拼接出你想要的集合。但有个缺点就是代码耦合性太大了。2.3 方案3之前品牌苏三在第二页最根本的原因是使用了edit_time字段进行逆序的。也就是说修改时间越大的越排在前面而品牌苏三的修改时间很小所以排在第二页了。如果想品牌苏三排在第一页修改一下排序规则不就搞定了可以改成按id或者name字段排序。用id字段排序不太合适虽说用了雪花算法但跟修改时间类似先插入的数据会越小。select * from brand where name like %苏三%  order by id desc limit 5;用它排序的结果跟使用修改时间排序差不了太多。看来只能使用name字段排序了。3.如何排序我们在sql中直接对name字段进行升序或者降序吗显然不是。使用name字段降序select * from brand where name like %苏三%  order by name desc limit 5;执行结果图中并没有看到我们想要的数据。其实使用name字段升序也可能在第一页查不出我们所想要的数据。到底该如何处理呢假如我们有这样一种排序全匹配显示在最前面比如苏三。数据左半部分匹配右边按字母排序比如苏三1、苏三2、苏三说技术。从中间开始匹配比如1苏三、2苏三。第2步和第3步还要根据字符长度排序字符短的排在前面比如1苏三、1苏三1、苏三说技术。如果我们能实现上面的这种排序方式这个问题就能完美解决了。说起来容易做起来难。难道要先全匹配name苏三再有匹配name like 苏三%再左匹配name like %苏三把查询三次的结果组装起来显然这种做法有点low。要实现上面我们设想的排序方式在es中更好处理一下但在mysql中要怎么处理呢4.解决方案其实我们可以换一种思路根据字符的长度排序。mysql给我们提供了很多非常有用的函数比如char_length。通过该函数就能获取字符长度。sql调整如下select * from brand where name like %苏三%  order by char_length(name) asc limit 5;name字段使用关键字模糊查询之后再使用char_length函数获取name字段的字符长度然后按长度升序。仅这一个骚操作就搞定需求了我们所期待的苏三终于排在第一个了。同时由于该sql做了分页的即使name字段在查询时丢失了索引执行效率也不会太低。业务上的需求搞定了。但追求完美的我们好奇想看看第二页是什么情况select * from brand where name like %苏三%  order by char_length(name) asc limit 5,5;执行结果并没有按照我们设想的剧本进行下去我们之前假设的3条排序中第2条和第3条都没有满足。这时该怎么办答可以使用mysql中的locate函数通过它可以匹配的关键字在字符串中的位置。使用locate函数改造之后sql如下select * from brand where name like %苏三%  order by char_length(name) asc, locate(苏三,name) asc limit 5,5;执行结果完美终于出现我们想要的结果了。除此之外还可以使用instr和position函数它们的功能跟locate函数类似在这里我就不一一介绍了感兴趣的小伙伴可以找我私聊。5. 总结其实模糊查询和分页如果分开用一般是没问题的。但如果它们要一起使用一定要考虑排序问题。如果只是按照简单的时间或者id排序有些特殊的业务场景没办法满足很容易出现bug。当然解决上面问题还有其他办法比如pageSize调大一点或者把全匹配放到第一页。但更优的方案是通过mysql的函数来解决问题。我们可以通过mysql提供的char_length、locate、instr和position函数等来实现很多复杂的排序功能。最后说一句(求关注别白嫖我)如果这篇文章对您有所帮助或者有所启发的话帮忙扫描下发二维码关注一下您的支持是我坚持写作最大的动力。求一键三连点赞、转发、在看。
http://www.pierceye.com/news/856781/

相关文章:

  • wordpress網頁版天津百度网站排名优化
  • 做网站建设销售工资代做电大网站ui作业
  • DMZ做网站wordpress 小工具 创建
  • 宠物网站建设方案外贸网站建设公司服务
  • 玉林网站建设学校门户网站建设的意义
  • 湖南营销型网站建设 在线磐石网络现在出入河南最新规定
  • 阿里云虚拟主机网站国内十大mcn公司
  • c 做网站起什么作用电商建站系统
  • wordpress 网站 上传微信公众平台直接上传wordpress
  • 北滘高明网站建设电子商城网站建设价格
  • 根据一个网站仿做新网站是什么网站代理公司注册收费
  • 创业给企业做网站开发青岛公司建设网站
  • 银川网站建设联系电话郑州网站建设廴汉狮网络
  • 在兔展上怎么做网站页面高端企业网站建站
  • 网站开发 调试网站做seo推广方案
  • 网站的服务器和空间微网站技术
  • 烟台软件优化网站敦煌网站建设
  • wordpress防抓取wordpress seo h1标签
  • 产品宣传网站模板完整个人网站html
  • 多用户商城网站开发seo搜索是什么
  • 永川网站制作网页设计中好的网站
  • 淮南本地网从化网站建设优化
  • 必要是什么网站山东网站seo
  • 汕头网站快速优化排名wordpress安装流程图
  • 郑州视频网站建设大概多少钱赶集网2022年最新招聘
  • 购物网站怎么做优化wordpress 暖岛 主题
  • 帝国cms如何做电影网站广告设计要学哪些软件
  • 企业做网站的意义网站建设的知识
  • 重庆荣昌网站建设价格内网网站建设流程
  • 专业网站建设哪家好网站开发英语英语