我正在做一个我的私人项目,我已经被困在这里一段时间了。我有一个MySQL数据库,其中有一个名为“articles”的表,其中包含一个名为“article_tags”的列。现在说我的一个PHP变量正在举行类似“dwayne johnson争论”的内容。我基本上想进入我的数据库并查找这些空格分隔关键字的任何实例,并在任何一个关键字出现时抓取整行。在我的数据库中,“article_tags”列将这些关键字保存为“争论汽车玩具单词单词”由于关键词“争论”在那里,我需要获取整行。
知道怎么做吗?
答案 0 :(得分:0)
试试这个
$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
}
答案 1 :(得分:0)
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
关系。您不会绑定到特定的分隔符,您可以使用索引来加速搜索。功能
答案 2 :(得分:0)
SELECT *
FROM tableName
WHERE
LOWER(`text`) REGEXP '\b(the|quick|fox)\b'
我希望它可以帮助你我的朋友
答案 3 :(得分:-1)
您可以使用like operator
$sql = "SELECT * FROM articles WHERE tag like %dwayne% OR like %arguing%"