Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php MySQL中如何根据关键字过滤数据?_Php_Mysql - Fatal编程技术网

Php MySQL中如何根据关键字过滤数据?

Php MySQL中如何根据关键字过滤数据?,php,mysql,Php,Mysql,我面临一个关于过滤关键字检索数据的问题 我的筛选表:- +--+-------+-----------+---------+---------------+ |id|user_id|for_page_id|key_words| message | +--+-------+-----------+---------+---------------+ | 1| 12| 2 |he,you |You are awesome| | 2| 12|

我面临一个关于过滤关键字检索数据的问题

我的筛选表:-

+--+-------+-----------+---------+---------------+
|id|user_id|for_page_id|key_words|    message    |
+--+-------+-----------+---------+---------------+
| 1|     12|        2  |he,you   |You are awesome|
| 2|     12|        2  |the,book |this is good   |
+--+-------+-----------+---------+---------------+
我有一个关键字字符串,我想找到该关键字对应的消息。
我试过这个:-

$string='he is good';
$keyWords=explode(' ',$string);
$query="SELECT * FROM `filter` WHERE `key_words` like '".$keyWords[0]."' or`key_words` like 
        '".$keyWords[1]."' or`key_words` like '".$keyWords[2]."'";
echo ($query);
这个问题看起来像

SELECT * FROM `filter` WHERE `key_words` like 'he' or`key_words` like 'is' or`key_words` like 'good'
它的输出为

| 1|     12|        2  |he,you   |You are awesome|
| 2|     12|        2  |the,book |this is good   |
接受的输出是

| 1|     12|        2  |he,you   |You are awesome|
如果您有任何想法,我们将不胜感激。

您可能正在寻找FIND_IN_SET()函数

SELECT FIND_IN_SET('b','a,b,c,d');
-> 2
如果在列表中找不到该字符串,则返回0

下面是指向

的链接,您可能正在查找FIND_IN_SET()函数

SELECT FIND_IN_SET('b','a,b,c,d');
-> 2
如果在列表中找不到该字符串,则返回0


这里有一个链接,指向

试试这个。希望对你有帮助

$string='he is good';
$keyWords=explode(' ',$string);
$searchQuery='';
foreach ($keyWords as $word) {
    $word = trim($word);
    if ($word) {
        $searchQuery = $searchQuery . "find_in_set('$word', trim(key_words)) > 0 or ";
    }
}
$searchQuery = chop($searchQuery, ' or ');
$query="SELECT * FROM filter WHERE ".$searchQuery;
echo ($query);
查询将是这样的

SELECT * FROM filter WHERE find_in_set('he', trim(key_words)) > 0 or find_in_set('is', trim(key_words)) > 0 or find_in_set('good', trim(key_words)) > 0

试试这个。希望对你有帮助

$string='he is good';
$keyWords=explode(' ',$string);
$searchQuery='';
foreach ($keyWords as $word) {
    $word = trim($word);
    if ($word) {
        $searchQuery = $searchQuery . "find_in_set('$word', trim(key_words)) > 0 or ";
    }
}
$searchQuery = chop($searchQuery, ' or ');
$query="SELECT * FROM filter WHERE ".$searchQuery;
echo ($query);
查询将是这样的

SELECT * FROM filter WHERE find_in_set('he', trim(key_words)) > 0 or find_in_set('is', trim(key_words)) > 0 or find_in_set('good', trim(key_words)) > 0

我建议您使用少量php代码,而不是仅使用MYSQL。就像在Mysql中一样,它将比较字符串的这一部分,如果匹配,它将返回列的所有内容。所以这种方法是错误的。好吧,那么我怎么能用php代码做到这一点呢?我建议使用少量的php代码,而不是只使用MYSQL。就像在Mysql中一样,它将比较字符串的这一部分,如果匹配,它将返回列的所有内容。所以这个方法是错误的。好吧,那么我如何通过php代码做到这一点呢?谢谢你的建议。谢谢你的建议。