我从MySQL数据库中检索数据使用一个简单的SELECT from WHERE LIKE不区分大小写的查询,其中我在LIKE子句中转义任何%
或_
,所以真正的用户只能执行基本的文本研究,不能混淆regex,因为我然后在LIKE子句中自己用%
包围它。
对于这个查询返回的每一行,我必须使用JS脚本再次搜索,以便在原始字符串中找到子字符串的所有索引。我不喜欢这种方法,因为如果它与LIKE查询使用的模式匹配不同,我不能保证算法是相同的。
我发现MySQL函数POSITION
或LOCATE
可以实现它,但他们只返回第一个索引,如果它被找到或0,如果没有找到。是的,你可以设置第一个索引来搜索,通过搜索,通过传递之前返回的索引作为第一个索引,直到新返回的索引为0,你可以找到子字符串的所有索引,但这意味着很多额外的查询,它可能最终会减慢我的应用程序很多。
所以我现在想知道:是否有办法让LIKE
查询返回子字符串位置直接,但我没有找到任何,因为我缺乏MySQL词汇(我是一个新手)。
简单回答:不。
更长的回答:MySQL没有语法或机制来返回任何数组——无论是从SELECT
还是存储过程。
可能的答案是:您可以编写一个循环遍历一个结果的存储过程,查找结果并将它们打包到一个逗号中。但我害怕代码会如此混乱。我会很快决定写JS代码,就像你已经做过的那样。
这个故事的寓意:SQL不是一门完整的语言。它在存储和有效检索大量行方面很出色,但在字符串操作或数组(除了"rows"方面很糟糕。
Commalist
如果你实际上是在搜索一个简单的列表,用逗号分隔的东西,那么MySQL中的FIND_IN_SET()
和SUBSTRING_INDEX()
可以紧密匹配JS对字符串的分割(逗号)方法。