Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/13.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 匹配。。。反对';我想不出确切的结果_Php_Mysql_Sql_Full Text Search - Fatal编程技术网

Php 匹配。。。反对';我想不出确切的结果

Php 匹配。。。反对';我想不出确切的结果,php,mysql,sql,full-text-search,Php,Mysql,Sql,Full Text Search,我第一次在php sql中使用MATCH…对抗,但是有一个问题困扰着我,我不知道如何解决它。这是我的代码: SELECT * FROM m_artist WHERE match(artist_name) against('". $_POST['article_content'] ."' IN BOOLEAN MODE) 这是$\u POST['article\u content']: Wildstylez Brothers Yeah Frontliner Waveliner 现在我的输出应该

我第一次在php sql中使用MATCH…对抗,但是有一个问题困扰着我,我不知道如何解决它。这是我的代码:

SELECT * FROM m_artist WHERE match(artist_name) against('". $_POST['article_content'] ."' IN BOOLEAN MODE)
这是
$\u POST['article\u content']:

Wildstylez Brothers Yeah Frontliner Waveliner

现在我的输出应该是:我数据库中的Wildstylez、Frontliner和Waveliner cause。除此之外,我还有伏特加兄弟,两个硬派兄弟,还有更多的兄弟这个词。如何修复SQL只选择文字匹配的问题?

全文搜索实际上是一个很容易误导的名称:你可以通过你的查询来搜索全文(就像谷歌那样),但它不能保证全文等于你的查询

因此,根据您的输入,
Wildstylez Brothers Yeah
Frontliner Waveline被解释为
Artister_name
包含(至少)一个
Wildstylez
Brothers
Yeah
Frontliner
Waveliner
作为单词。这就是为什么您会得到例如包含
兄弟的伏特加兄弟
,它包含
兄弟
。对于类似谷歌的目的来说,这正是你想要的,因为你想获得一些你只知道的东西的详细信息,比如在
音乐
上的show me文章中

您可能想使用

artist_name LIKE '%name_part1%' OR artist_name LIKE '%name_part2%' ...

最简单的情况是这样做

$names = explode(' ', $_POST['article_content']);
$name_searches = array_map(function($a) {return 'artist_name = \''.mysql_real_escape_string($a).'\'';}, $names);
$sql = "SELECT * FROM m_artist WHERE ".implode(" OR ", $name_searches);
但是,由于名称本身包含一个空格,因此您将失去查找
2个Hardstyle兄弟的功能

另一种方法是用“+”作为所有单词的前缀,并坚持使用
MATCH()反对()
,这样您将只找到包含所有给定单词的艺术家


如果这不是您想要的,请提供更多的上下文。

文字匹配的定义比您使用的更精确。@Mihai那么我应该使用什么?您想要的根本不清楚。全文搜索搜索这些单词中的一个,这样它就可以工作了……我只想找到Wildstylez,Frontliner和Waveline,因为它们在数据库中。因为我用了“兄弟”这个词,所以它也可以找到伏特加兄弟,但这不是我想要的。问题是如何更改查询以使其工作@MihaiYou可以从澄清您正在使用的数据库开始。单靠它本身并没有多大帮助。你在起诉吗?
$names = explode(' ', $_POST['article_content']);
$name_searches = array_map(function($a) {return 'artist_name = \''.mysql_real_escape_string($a).'\'';}, $names);
$sql = "SELECT * FROM m_artist WHERE ".implode(" OR ", $name_searches);