我正在做一个私人项目,我已经在这里呆了一段时间了。我有一个MySQL数据库,它有一个名为"articles"的表,其中包含一列名为"article_tags"。我基本上想进入我的数据库,寻找这些空格分隔的关键字的任何实例,如果出现任何一个关键字,就抓住整行。在我的数据库中,"article_tags"列将这些关键字保存为"辩论汽车玩具单词单词单词单词"。由于关键字"辩论"在其中,我需要获取整行。
知道怎么做吗?
Mysql有一个名为find_in_set
的方法,它可以执行您想要的操作,但只能在逗号分隔的字符串上执行:
SELECT FIND_IN_SET("search_value", tags)
然而,我确信在这种情况下,它将无法有效地使用索引,因此对于大型记录集来说,它可能会非常慢。
如果你因为某种原因无法更改分隔符,并且你知道你的标签不会包含空格或逗号,那么你可能会这样做:
SELECT FIND_IN_SET("search_value", REPLACE(tags, " ", ","))
find_in_set
返回一个整数,该整数指示在字符串中找到匹配项的位置。因此它将为find_in_set('b', 'a,b,c')
返回'2'。如果返回0,则表示找不到该字符串。如果您在WHERE
语句中使用它,请执行以下操作:WHERE FIND_IN_SET("search_value", tags) > 0
。
正如您可能知道的,在MySQL中进行标记的最明智的方法可能是将标记保存到一个单独的表中,并使用one-to-many
或many-to-many
关系。您不会被绑定到特定的分隔符,您可以使用索引来加快搜索速度
尝试这个
$str = "dwayne johnson arguing";
$arr_words = explode(" ", $str);
foreach($arr_words as $word)
{
$word = trim($word);
$sql = "SELECT * FROM `articles` WHERE `article_tags` LIKE '%$word%'";
// RUN SQL HERE
}
SELECT *
FROM tableName
WHERE
LOWER(`text`) REGEXP 'b(the|quick|fox)b'
我希望它能帮助你,我的朋友
您可以使用类似运算符
$sql = "SELECT * FROM articles WHERE tag like %dwayne% OR like %arguing%"