gpt4 book ai didi

mySQL:包含 | 的选择查询出现问题符号(LIKE 和/或 REGEXP)

转载 作者:行者123 更新时间:2023-11-29 02:02:46 25 4
gpt4 key购买 nike

我当前的查询如下所示:

$query = "SELECT * FROM t WHERE (data LIKE '$findme') OR (data LIKE '%$findme|%') OR (data LIKE '%|$findme%')";

此列中的数据包含由竖线符号(“|”)分隔的项目,我需要查询来查找包含此字段中出现的任何项目的所有记录。此外,如果此列中只有一项,则不会有“|”符号存在。

示例:

$findme = "12";

查询应该匹配:

13|23|12
12
12|23
3|12|42

查询不应匹配:

123|32
34|123

我不确定使用 REGEXP 是否会使这更容易,但如果是这样,欢迎任何解决方案。谢谢!

SQLFiddle 示例: http://sqlfiddle.com/#!3/32afd/5

最佳答案

使用 REPLACE() 的组合和 FIND_IN_SET() ,您可以将 | 替换为逗号,并在管道分隔的集合中找到您的值 $findme:

SELECT * 
FROM table
/* Replace | with , and search in the set */
WHERE FIND_IN_SET('$find_me', REPLACE(data, '|', ',')) > 0

请注意,这仅适用于 data 中的分隔值不包含逗号的情况。

从长远来看,适当的解决方案是将分隔列 data 分离到另一个正确规范化的一对多表中。

关于mySQL:包含 | 的选择查询出现问题符号(LIKE 和/或 REGEXP),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12021243/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com