【发布时间】:2015-12-13 18:07:36
【问题描述】:
我正在搜索 welds.welder_id 和 welds.bal_welder_id,它们是由用户用空格分隔的唯一焊工 ID 列表。
记录集看起来像99,199,99 w259,w259 259 5-a
99,199,259,5-a 和 w259 是唯一的焊工 ID 号
我不能单独使用 MYSQL INSTR() 函数,因为搜索“99”会提取“199”的记录
每个项目的用户通常以不同的方式(000,a000,0aa)格式化他们的焊工 ID,以匹配他们客户的记录。
出于多种原因,我真的想避免使用 PHP 代码。
要在welder_id 或bal_welder_id 列中选择带有“w259”的记录,我的查询如下所示。
SELECT * FROM `welds`
WHERE `omit`=0
AND( (`welder_id`='w259' OR `bal_welder_id`='w259')
OR (`welder_id` LIKE 'w259 %' OR `bal_welder_id` LIKE 'w259 %')
OR (`welder_id` LIKE '% w259' OR `bal_welder_id` LIKE '% w259')
OR (INSTR(`welder_id`, ' w259 ') > 0 OR INSTR(`bal_welder_id`,' w259 ') > 0))
ORDER BY `date_welded` DESC
LIMIT 100;
它可以工作,但它需要 0.0030 秒,我的工作站 SSD 上有 1300 条测试记录。
实际的数据库在一两年后会有几十万。
有没有更好的办法?
谢谢。
【问题讨论】:
标签: php mysql regex wildcard sql-like