Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/253.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_Sql_Mysqli - Fatal编程技术网

如何使用PHP MySql搜索搜索查询中的每个单词

如何使用PHP MySql搜索搜索查询中的每个单词,php,mysql,sql,mysqli,Php,Mysql,Sql,Mysqli,我正在使用PHP和mysqli从数据库中获取记录。 表引擎=innoDB MYSQL v5.5 假设我有这些记录 1 |美丽的瑞士女孩| 2 |公园里美丽的兔子| 3 |天然海| 现在,如果搜索查询是beautifuly,它将返回前2条记录,但问题是如果我搜索beautifuly anything,它将不返回任何内容,但我希望在这种情况下显示前2条记录,因为它包含单词beautifuly。我正在使用SELECT*FROM表中的名称,如“%value%”,ORDER BY id ASC作为mysq

我正在使用PHP和mysqli从数据库中获取记录。
表引擎=
innoDB


MYSQL v5.5

假设我有这些记录

1 |美丽的瑞士女孩|
2 |公园里美丽的兔子|
3 |天然海|

现在,如果搜索查询是
beautifuly
,它将返回前2条记录,但问题是如果我搜索
beautifuly anything
,它将不返回任何内容,但我希望在这种情况下显示前2条记录,因为它包含单词
beautifuly
。我正在使用
SELECT*FROM表中的名称,如“%value%”,ORDER BY id ASC
作为mysql查询,以便立即进行搜索

是否有其他查询或方法来实现此目的,或者唯一可能的选择是开发自定义算法

这将完成工作:

SELECT * FROM table WHERE name LIKE '%Beautiful%' OR name LIKE '%anything%'
这是您必须使用的
。因此,假设您从某处得到一个查询:

// get your query
$query = <...somewhere....>
// explode into words
$words = explode(' ',$query); 
// write conditions, pay attention to security!
foreach ($words as $word)
{
  $escaped = ESCAPE($word); // depends the db extension you use
  $conditions[] = "name LIKE '%$escaped%'";
}
// combine into sql
$sql = "SELECT * FROM table WHERE ".implode(' OR ',$conditions);
//获取您的查询
$query=
//滔滔不绝
$words=explode(“”,$query);
//写条件,注意安全!
foreach($words作为$word)
{
$ESCAPE=ESCAPE($word);//取决于您使用的数据库扩展名
$conditions[]=“名称类似“%$转义%”;
}
//合并到sql中
$sql=“从表格中选择*”。内爆('OR',$conditions);

然后你可以
查询中的所有单词。

为此,我建议你使用
全文搜索。它将完全满足您的要求,以获得有关全文搜索的更多详细信息,您可以通过此

如果您使用的是
innodb
而不是
myisam
引擎,请尝试使用此链接


我建议Lucene或Solr提供全文搜索功能。这将为您提供非常快速的数据和相对直接的数据库查询

参考链接:


如果您能粘贴完整的查询以解决问题,我们将不胜感激。我不知道搜索查询。这将是动态的。为了更好地理解,我刚刚举了一个例子。我也举了一个例子,我的也是一个例子。你是否理解
位?o是的,但为此,我必须制定一个自定义算法,首先分解句子,然后计算单词总数,然后相应地进行查询。我的意思是,我正在寻找一种更有效的方法。就我个人而言,我更喜欢查询生成器,比如Yii中的一个:是的,我已经知道了。事实上,它也可以通过删除任何明显的单词来增强算法,比如这个,那个,in,on等等。但是我想知道的是,v可以解决这个问题而不需要定制算法。我试过了,但发现引擎需要设置为
MYISAM
,问题是
MYISAM
不允许外键。啊,您正在使用innodb?当我尝试在innodb表上使用该查询时,请查看此链接,它会抛出
错误号:1214使用的表类型不支持全文索引