有坑!你知道吗-分页-模糊查询 (有坑吗是什么意思)

教程大全 2025-07-18 16:23:59 浏览

前言

有坑吗是什么意思

不知道你有没有使用过Mysql的like语句,进行模糊查询?

不知道你有没有将查询结果,进行分页处理?

模糊查询,加上分页处理,会有意想不到的坑,不信我们继续往下看。

我之前提供过一个品牌查询接口,给前端品牌选择控件使用的。

当时为了性能考虑,怕前端控件因为一次性加载太多的品牌,而导致页面卡死。

因此,对品牌查询接口做了分页处理。

刚开始品牌表的数据比较少,没有出现什么问题。

后来,产品加需求了,在品牌下拉选择控件中,让用户可以输入自定义品牌。

在用户添加品牌前,需要先查一下,如果该品牌存在,则使用已有品牌。如果不存在,则新增品牌。(这里是精确匹配)

这个需求很简单,很容易实现了。

后来,产品又加需求了,需要按名称模糊查询品牌。

该功能上线后,使用了很长一段时间,也没啥问题。

突然,在不经意的某一天,这个功能却出问题了。

到底怎么回事呢?

1、案发现场

某一天下午,运营找到测试反馈一个问题说:明明品牌苏三,已经存在了,但用户输入关键字:苏三时,系统没有让用户直接选择已有品牌,而是添加了一个叫:苏三的自定义的品牌。

我过去一看,还真的有问题。

不一会儿,就定位到原因了,初步判断是分页的问题。

搜索关键字:苏三,竟然出现了好几页的数据,把我惊呆了,品牌表怎么多了这么多数据了。

我查了数据库,其实数据量并不是特别多,但有些品牌名称比较特殊,有些品牌名称是多个品牌名称拼接而成的,比如:苏三,李四 或者 苏三,李四,王五,这是一个品牌。

其实是品牌名称建的不规范导致的问题,但已经没法让运营修改品牌了,只能通过技术手段解决目前的问题。

查询第一页的数据sql:

 brand  name  edit_date 

执行结果:

我们可以看到,图中并没有等于苏三这两个字的数据。

查询第二页的数据sql:

 brand  name  edit_date 

执行结果:

从图中看到,在第二行,出现了正好等于苏三这两个字的数据。

用户搜索关键字:苏三 时,前端页面在调用品牌查询接口,pageNo默认是1。由于能够匹配关键字的数据太多了,第一页返回不完,需要多页才能全部返回。

前端获取到第一页的数据后,跟关键字:苏三 做比较,发现没有等于苏三的品牌。

这样就会在下拉控件中,自动添加一个品牌:苏三,同时在右边增加自定义标签。

这样就出问题了,明明苏三这个品牌是有的,但用户还能自定义一个苏三,而不是直接选择。

2、思考123

苏三这个关键字,通过模糊查询可以查询出来,但由于品牌接口做了分页,全匹配的品牌:苏三,出现在第二页了,才导致问题的产生。

如果要解决这个问题,让它出现在第一页不就OK了?

这时候,就有下面几种解决方案。

(1)方案1

分页查询品牌接口,Pagesize是5。

我们为什么不把pageSize调大一点?比如改成:200、500等。

这样通过苏三关键字,进行模糊查询的时候,结果基本都在第一页。

这样就能非常快速的解决问题。

但有个缺点就是:如果这次调大了pageSize,但后面查询关键字的品牌又出现在第二页怎么办?

不可能一直改pageSize吧?

(2)方案2

把分页查询接口的数据,拆分成两部分:

在代码中做处理的时候,先根据关键字精确查询,即sql中使用name=’苏三’,这种方式查询一次数据。

如果没查出数据,则再直接用like ‘%苏三’进行模糊查询。

如果查出了一条数据,则把它放在返回结果集合中的第一位置。接下来,使用like ‘%苏三’进行模糊查询的时候,再加上条件name <> ‘苏三’。将查出的结果,从第二个位置往后放。

这样可以拼接出你想要的集合。

但有个缺点,就是代码耦合性太大了。

(3)方案3

之前,品牌苏三在第二页,最根本的原因是使用了edit_time字段进行逆序的。

也就是说,修改时间越大的越排在前面,而品牌苏三的修改时间很小,所以排在第二页了。

如果想品牌苏三,排在第一页,修改一下排序规则,不就搞定了?

可以改成按:id或者name字段排序。

用id字段排序,不太合适,虽说用了雪花算法,但跟修改时间类似,先插入的数据,会越小。

 brand  name  id 

用它排序的结果,跟使用修改时间排序差不了太多。

看来,只能使用name字段排序了。

3、如何排序?

我们在sql中直接对name字段,进行升序或者降序吗?

显然不是。

使用name字段降序:

 brand  name  name 

执行结果:

图中并没有看到我们想要的数据。

其实,使用name字段升序,也可能在第一页查不出我们所想要的数据。

到底该如何处理呢?

假如,我们有这样一种排序:

如果我们能实现上面的这种排序方式,这个问题就能完美解决了。

说起来容易,做起来难。

难道要先全匹配:name=’苏三’,再有匹配:name like ‘苏三%’,再左匹配:name like ‘%苏三’,把查询三次的结果组装起来?

显然这种做法有点low。

要实现上面我们设想的排序方式,在es中更好处理一下,但在mysql中要怎么处理呢?

4、解决方案

其实,我们可以换一种思路,根据字符的长度排序。

mysql给我们提供了很多非常有用的函数,比如:char_length。

通过该函数就能获取字符长度。

sql调整如下:

 brand  name  char_lengthname

name字段使用关键字模糊查询之后,再使用char_length函数,获取name字段的字符长度,然后按长度升序。

仅这一个骚操作,就搞定需求了:

我们所期待的:苏三,终于排在第一个了。同时由于该sql做了分页的,即使name字段在查询时丢失了索引,执行效率也不会太低。

业务上的需求搞定了。

但追求完美的我们,好奇,想看看第二页是什么情况:

 brand  name  char_lengthname

执行结果:

并没有按照我们设想的剧本进行下去,我们之前假设的3条排序中,第2条和第3条都没有满足。

这时该怎么办?

答:可以使用mysql中的locate函数,通过它可以匹配的关键字,在字符串中的位置。

使用locate函数改造之后sql如下:

 brand  name  char_lengthname locatename

执行结果:

完美,终于出现我们想要的结果了。

除此之外,还可以使用:instr和position函数,它们的功能跟locate函数类似,在这里我就不一一介绍了,感兴趣的小伙伴可以找我私聊。

其实,模糊查询和分页,如果分开用,一般是没问题的。

但如果它们要一起使用,一定要考虑排序问题。

如果只是按照简单的时间或者id排序,有些特殊的业务场景,没办法满足,很容易出现bug。

当然解决上面问题,还有其他办法,比如:pageSize调大一点,或者把全匹配放到第一页。

但更优的方案,是通过mysql的函数来解决问题。

我们可以通过mysql提供的:char_length、locate、instr和position函数等,来实现很多复杂的排序功能。


药品储运和养护的基本技能

是指在家的储存还是公司的储存.家里的储存比较简单.一般是防潮,防晒,湿度在45%到75%之间.如果说明书上说置阴凉处则指存放在温度在10~25度之间,置干燥处则指0~30度,置冷处则指2~8度之间.公司的那就比较多要求啦,不知你是要问什么的,说得不太清楚.我猜,你要的是制度之类的,是吧.药品储存保管制度1. 药品储存保管与养护的基本工作职责是:安全储存、降低损耗、科学养护、保证质量、收发迅速、避免事故。 2. 仓库保管人员的基本职责:2.1 按照药品不同自然属性分类进行科学储存,防止差错、混淆、变质;2.2 做到数量准确,帐目清楚,帐、货、卡相符。 3. 药品仓储保管应执行《药品储存控制程序》,并按《主要剂型的储存保管与养护要点》做好在库药品的储存保管。 3.1 药品应按储藏温、湿度要求,分别储存于阴凉库或常温库、冷藏库内。 3.1.1阴凉库:温度不高于20℃;3.1.2常温库:温度保持在0℃~30℃;3.1.3 冷库:温度保持在2℃~10℃3.1.4相对湿度:各库房相对湿度保持在45%~75%之间。 3.2 药品应依据药品性质,按分库、分类存放的原则进行储存保管,其中:3.2.1药品与非药品(指不具备药品生产批准文号的物品)应分库存放;3.2.2内服药与外用药应分库或分区存放;3.2.3品种与外包装容易混淆的品种应分区或隔垛存放;3.2.4易串味的药品、中药材、中药饮片、化学原料药以及性质相互影响的药品应分库存放;危险品应与其他药品分库存放;3.2.5药品中的危险品应存放于危险品专库;3.2.6 处方药与非处方药分开存放;3.2.7不合格品应存放在不合格品区内,按《不合格药品管理规定》进行管理;3.2.8退货药品应存放在退货区在,经质量验收并确认为合格品后再移入合格品区;经质量验收为不合格的入不合格品区; 3.2.9药品按品种、规格、批号、生产日期及效期远近依次或分开堆垛,如混批堆码,每一垛的混批时限为:药品的产品批号或生产日期间隔应不超过一个月;3.2.10近效期药品即有效期不足一年时,应按月填报近效期药品催销月报表;3.2.11近效期药品应挂近效期标志;3.2.12经营特殊管理药品(即麻、精、毒、放类药品),按其相应的管理制度执行。 3.3 在搬运和堆垛等作业中均应严格按药品外包装图示标志的要求搬运存放,规范操作。 不得倒置,要轻拿轻放,严禁摔撞。 怕压药品应控制堆放高度,并定期翻垛。 3.4 药品的货堆应留有一定距离,具体要求如下:3.4.1药品垛与垛的间距不小于100cm;3.4.2药品垛与墙、柱、屋顶、房梁的间距不小于30cm;3.4.3药品垛与散热器或供暖管道、电线的间距不小于30cm;3.4.4药品与地面的间距不小于10cm;3.4.5库房内主要通道宽度不小于200cm;3.4.6照明灯具垂直下方不准堆放药品,其垂直下方与药品垛之间的水平距离不小于50cm。 3.5 在库药品均实行色标管理。 其中:3.5.1黄色:为待验药品、退货药品。 3.5.2绿色:为合格药品。 3.5.3红色:为不合格药品。 3.6 药品入库时应按照《进货药品验收入库工作流程》及其图示经过质量检查验收,并依据检查验收员签字或盖章的验收入库通知单办理入库手续。 3.7 药品仓储保管人员对货与单不符、质量异常、包装不牢或破损、标志模糊等情况,有权拒收并报告企业有关部门处理。 3.8 药品仓储保管人员应接受药品养护员有关储存方面的指导,掌握《主要剂型的储存保管与养护要点》,与养护员共同做好仓间温、湿度等管理,正确储存药品。 3.9 药品出库发货时,应坚持执行《药品出库复核的管理规定》,未经复核人员检查复核并签字的药品不得出库发货3.10 药品出库发货时,应做好出库发货复核记录。 3.11 对于销后退回药品,应按《退货药品的管理规定》做好退货记录与存放、标识等管理工作。 3.12 药品仓储保管人员每月底应定期做好库存盘点工作,做到货、帐、卡相符。 药品养护管理制度 1. 药品养护工作的职责是:安全储存,科学养护,保证质量,降低损耗。 2. 从事药品养护工作的人员,应具有中专以上医药或相关专业学历,或高中以上文化程度,经岗位培训和地市级以上药品监管部门考核合格后,取得岗位合格证书方可上岗。 3. 从事药品养护工作的人员,应定期接受企业或药品监管部门组织的继续教育。 4. 从事药品养护工作的人员,应熟悉在库储存药品的性质与储存养护要求,以便指导并配合仓库保管人员对在库药品进行合理储存保管。 5. 经常检查在库药品的储存条件,配合仓库保管人员做好仓间温、湿度的检测和管理工作。 每日上午9时、下午3时各一次定时对库内温湿度进行记录。 如库内温湿度超出规定范围,应及时采取调控措施,并予以记录。 6. 养护人员应按照《药品在库养护检查操作规程》定期对在库药品根据流转情况进行养护和质量检查,并做好检查记录。 对检查中发现的问题应及时通知质量管理部进行复查处理。 7. 检查中,对由于异常原因可能出现问题的药品、易变质药品、已发现质量问题药品的相邻批号药品、储存时间较长的药品和在库时间较长的中药材及中药饮片,应报请质量管理机构抽样送药品检验机构检验。 8. 库存养护中如发现质量问题,应立即悬挂明显标志和暂停发货,并尽快通知质量管理部予以处理。 9. 对中药材和中药饮片按其特性,采取干燥、降氧、熏蒸等方法进行养护。 10. 定期汇总、分析和上报养护检查、近效期或长时间储存的药品等质量信息。 11. 负责养护用仪器设备、温湿度检测和监控仪器、仓库在用计量仪器及器具等的维护、检定等管理工作。 12. 建立药品养护档案,内容包括养护档案卡、养护记录、检验报告书、查询函件、药品养护质量报表等。 药品出库复核管理规定1. 药品出库应遵循先产先出、近期先出和按批号发货的原则。 2. 药品出库必须进行复核和质量检查。 仓管人员、发货人和复核人应按出库单等发货或配送凭证对实物进行检查和数量、项目的逐一核对,核对无误后应在出库单上签字,方可出库; 3. 整件与非整件药品出库时,应分别注意:3.1 整件药品出库时,应检查包装是否完好;3.2 零头药品要仔细包装或拼箱,并详细注明药品名称、规格、生产厂牌、批号与数量,做到准确无误;3.3 拼箱出库发货时应注意:3.3.1应尽量将同一品种的不同批号或规格的药品拼装于同一箱内;3.3.2若为多个品种,应尽量按剂型进行拼箱;3.3.3若为多个剂型,应尽量按剂型的物理状态进行拼箱;3.3.4液体制剂不得与固体制剂拼装于同一箱内。 3.3.5 一般药品不能同麻醉药品、毒性药品、精神药品混装。 3.3.6 麻醉药品、毒性药品、危险品和性质互抵药品必须分别包装,并在外包装上注明。 3.3.7 中药饮片不得直接以麻袋、纸箱包装。 3.3.8 对发出的药品,所有应防冻和需冷藏的药品,必须应按相应的包装要求包装,应在外包装上加注标志,必要时还应注明不要倒置、小心轻放等字样。 3.3.9 由仓库分装、改装、换装的药品以及零货拼箱,箱外要加标记,箱内应放置装箱单。 进口药品出库,要加注中文标志。 3.3.10 所有发出的药品的外包装上应有鲜明的唛头,必须注明收货单位及地址的全称,发货单位的全称,并在外包装上注明有关保护安全的要求,以引起运输部门的注意。 (客户上门自提的除外)。 4. 在出库复核与检查中,如发现以下问题应停止发货或配送,并报告质管部处理;4.1 药品包装内有异常响动和液体渗漏;4.2 外包装出现破损、封口不牢、衬垫不实、封条严重损坏等现象;4.3 包装标识模糊不清或脱落;4.4 药品已超出有效期。 5. 药品出库复核时,为便于质量跟踪应做好出库复核记录。 5.1 药品出库复核记录的具体内容包括:购货单位、品名、剂型、规格、批号、有效期、生产厂商、数量、销售日期、质量状况和发货员、复核员等项目。 5.2 药品出库复核记录保存期不得少于5年。 6. 贵重药品和特殊管理的药品(毒、麻、精、放类药品)出库发货时,实行双人复查核对制度。 7. 药品出库发货应注意既要准确无误,又要及时迅速。 8. 药品出库后的发货运输应执行《药品交付与防护控制规定》。 8.1 应按药品理化性质及剂型特点,采取适宜的运输方式,及时、安全地将药品运送交付至顾客;8.2 在药品运输装卸搬运时,应轻拿轻放,按包装图示要求正确装运,并采取防雨、防晒、防震及防污染等措施,以保证药品安全与包装整洁。 8.3药品出库后,如对帐时发现错发,应立即追回或补换,如无法立即解决的,应填写查询单联系,并留底立案,及时与有关部门联系,配合协作,认真处理。 8.4抢险、救灾等特殊情况,仓库应按有关制度规定或应急措施,及时发货,不得延误,事后必须及时补办手续。

纯粹js 实现模糊搜索

你写的有点高深了~~是不是可以这样呢?vara=[a,b,c];for(vari=0;i<;i++){()==-1?(meiyou)(you);}//是你输入的内容。

电子地图怎么使用?

打开电子地图后选择您所要查询单位的所属行业或所在区域。 2、在搜索框内输入单位名称。 本搜索支持模糊查询,在查询结果中选择你要找的单位,则地图将以该单位为中心点在显示框里展开。 3、地图下方按钮说明: 居中:点击本按钮后,鼠标变为十字标示,此状态下点击地图的任一位置,则地图将以该位置为中心在显示框里展开。 放大:点击本按钮后,可放大地图。 缩小:点击本按钮后,可缩小地图。 全图:点击本按钮后,显示整个唐山市的行政区划图。 信息:点击本按钮后,在地图上选取任一单位,在该单位名称上双击鼠标左键,可打开该单位的信息框,了解该单位的概况、交通等相关信息。 测距:点击本按钮后,可测量该单位到地图任一位置的地理距离。 具体操作方法为:在起点按下鼠标左键,拖曳到终点,可直线拖曳也可按道路拖曳。 到中继点时,放开鼠标左键,然后以此中继点为起点继续拖曳,到达终点后,双击鼠标左键,则自动显示测量结果。 漫游:点击本按钮后,鼠标变为“手形”表示,此时,在显示框里任意拖动地图。 打印:点击本按钮后,可以打印显示框的地图。 4、地图右侧“结果”:在地图右侧有一个“结果”箭头指示,鼠标左键点击该箭头,可打开和关闭“结果”框。 二、服务流程: 电子地图标注服务包含以下具体内容: 1、名称标注; 2、域名联接; 3、在线视频或动画宣传。 受理流程如下:选择服务——填写电子地图信息登记表、提供域名信息、提供视频或动画宣传资料——付费——验收。

本文版权声明本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请联系本站客服,一经查实,本站将立刻删除。

发表评论

热门推荐