SQL Like Operator 在 PHP 中未按预期工作

SQL Like Operator not working as expected in PHP

我正在尝试从数据库中获取具有特定内容 tags 值的所有数据。如果我 运行 下面的代码,它只会 returns 带有 id 1 的行,即使单词 tag 是两行中 tags 值的一部分.我还添加了 %or% 运算符,但它正在获取确切的行。当我搜索 tag 时,它显示 2 行,但使用下面 $mytags 中的值,它只匹配 es 1 行。

如果 $mytags 中的任何内容匹配,我希望表达式获得一行。

SQL

$mytags = "tag, tag1";
SELECT * FROM table WHERE tags LIKE '%$mytags%' ORDER BY id DESC
id body tags
1 Loreum Content 1 tag, tag1
2 Loreum Content 2 tag

您对 LIKE 工作原理的预期似乎是错误的。如果您希望选择的那些行与 $mytags 变量中的任何逗号分隔标签相匹配,则需要以不同的方式执行此操作。

如果您想使用 LIKE,您需要展开并使用 OR:

SELECT * FROM table WHERE tags LIKE '%tag%' OR tags LIKE '%tag1%' ORDER BY id DESC

但是对于可变数量的标签,更好的方法是使用 REGEXP:

SELECT * FROM table WHERE tags REGEXP 'tag|tag1' ORDER BY id DESC

为此,您需要做的就是将 $mytags 中的分隔符更改为 |(无空格):

$mytags = 'tag|tag1'