Php 将字符串拆分为查询中位置的格式化字母

Php 将字符串拆分为查询中位置的格式化字母,php,mysql,Php,Mysql,这有点简单,但我找不到任何适合这种特殊情况的方法 我试图通过Mysql查询找到一个结果,其中db中的项是字符串中的一个字母。例如,我有字符串'MYSQL',我需要检索数据库中标识符为M或Q的所有内容 所以db看起来像这样 name identifier item1 M item2 Q item3 B 我想搜索“MYSQL”以返回item1和item2 LIKE不起作用,所以我尝试了WHERE-IN,但除非我将文本格式化为'M','Y','S',等等,否则它

这有点简单,但我找不到任何适合这种特殊情况的方法

我试图通过Mysql查询找到一个结果,其中db中的项是字符串中的一个字母。例如,我有字符串'MYSQL',我需要检索数据库中标识符为M或Q的所有内容

所以db看起来像这样

name     identifier
item1      M
item2      Q
item3      B
我想搜索“MYSQL”以返回item1和item2

LIKE不起作用,所以我尝试了WHERE-IN,但除非我将文本格式化为'M','Y','S',等等,否则它就不起作用

这不是不可能的,但我觉得有一种更雄辩的方式可以做到这一点。提前感谢。

使用REGEXP

如果使用单字符标识符创建正则表达式,则可以将其与所需的单词相匹配。例如:

select * from TABLENAME
where 'MySQL' REGEXP concat('.*', identifier, '.*');

这将得到带有“M”和“Q”的行,但不会得到带有“B”的行。

您可能在做类似的事情


在Oracle风格的语法中,您会使用:
WHERE'MYSQL'类似于UPPER('%''''.| | identifier| col |'%')
其中
|
是字符串串联,
%
是通配符。

为什么不能使用字符串串联和
类似于
运算符

SELECT name FROM table_identifiers
    WHERE UCASE('MYSQL') LIKE UCASE(CONCAT('%', identifier, '%'))

您可以使用这个字符串函数

SELECT * FROM table_name WHERE LOCATE(identifier, "mysql")>0

你坚持只在MySQL中实现它吗?如果您用PHP构造查询,这将很容易。这意味着什么:“类似于
不起作用”?为什么是正则表达式?它会减慢查询速度,您只需模拟like运算符的正常通配符。。。