![](/img/trans.png)
[英]How can I use '\' in SQL LIKE ... ESCAPE '\'
[英]How can I use RLIKE to effectively combine LIKE and IN, *and* escape regex characters where needed?
我需要弄清楚如何在数据库中查询序列A或序列B或序列C ,但是由于种种限制,这很难导航。
先前的解决方案使用LIKE
(例如SELECT * FROM Table WHERE Serial LIKE
)-在搜索所有序列( %
)或特定序列( Serial A
)时效果很好。 但是,我很快发现IN
和LIKE
不能在MySql中合并,并且LIKE
使用的通配符不够灵活,无法找到Serial A或Serial B或Serial C。
(注意:实际的序列有很大的不同,没有一致的约定-我知道可以使用%
通配符找到与这些基本示例一样简单的序列)
我立即想到的是改用RLIKE
但是某些序列被命名为B + 3
东西,并且必须逃避才能找到。 在这里,我以为使用一种转义字符的方法,例如preg_quote()
-但是其中存在系统结构方面的更多问题...
选择约束模块
通过查询数据库(例如SELECT DISTINCT Serial FROM Table
)来填充组合框,用户可以从中选择一个序列,然后提交表单。 选定的序列作为GET
值传递到下一页。
查看结果模块
$serial
变量的内容作为参数传递给SQL查询,以在页面上生成结果。 $serial
可以由View Results Module所属的页面填充,也可以由传递给该页面的GET
值填充(如果该模块在include
d之前尚未填充该值,并且没有GET
值,将会引发错误)。
这种结构让我有些困惑。 如果这是由用户传递的,则使用RLIKE
和preg_quote()
来搜索序列似乎很简单。 preg_quote()
可以在$serial
作为参数传递之前使用,并且更新的( WHERE Serial RLIKE
)查询应该可以按预期工作。 但是,我仍然不知道如何搜索多个序列。
如果我将$serial
指定为(Serial A | Serial B | Serial C)
则preg_quote()
将转义正则表达式字符并找不到它们。 但是,如果我不使用preg_quote()
,将找不到诸如B + 3
序列,因为正则表达式字符未转义。
我非常感谢您对改进此问题的任何反馈-我已尽力尽可能清楚地解释了该问题,但由于上下文和约束的复杂性,使其很难处理。 谢谢。
转义子字符串,而不是最终的正则表达式。
"(" . preg_quote(serialA) . "|" . preg_quote(serialB) . "|" . preg_quote(serialC) . ")"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.