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'
我正在尝试从数据库中获取具有特定内容 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'