You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL+PHP实现按首字母筛选时如何过滤常用词且不误伤有效数据

你的写法问题出在NOT LIKE "%Services%"会直接过滤所有包含Services的记录,连合法的Stroke Services也会被误判排除,核心要实现的逻辑是:只有当筛选字母出现在非通用词的首字母位置时,才返回对应记录。

可行解决方案

方案1:MySQL正则匹配(适合通用词较少的场景,MySQL 5.7+ 都支持)

直接用正则匹配规则,先找所有以目标字母开头的完整单词,再排除这些单词属于通用词的情况,以筛选字母S为例:

SELECT nid, title 
FROM node_field_data 
-- 匹配所有以S开头的完整单词(BINARY控制区分大小写,不需要可以去掉)
WHERE title REGEXP BINARY '(^| )S[^ ]*( |$)'
-- 排除所有匹配到的单词是通用词的情况,通用词可以自行扩展,注意大小写匹配
AND title NOT REGEXP BINARY '(^| )(and|And|AND|services|Services|SERVICES)( |$)';

执行后你给的示例数据只会返回Stroke Services,完全符合需求。

方案2:冗余字段预处理(适合数据量大、通用词多的场景)

如果你的数据量超过10万,或者后续要频繁新增通用词,建议额外加一个预处理字段,提前过滤通用词存储有效首字母,查询性能比正则高一个数量级:

  1. 新增字段:
ALTER TABLE node_field_data ADD COLUMN valid_first_char CHAR(1) NOT NULL DEFAULT '' COMMENT '过滤通用词后的首字母';
  1. 插入/更新标题时,用PHP拆分标题单词,跳过通用词后取第一个非通用词的首字母存入该字段
  2. 筛选时直接查询该字段即可:
SELECT nid, title FROM node_field_data WHERE valid_first_char = 'S';

内容的提问来源于stack exchange,提问作者A.Raza

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 18:54:06