如何使用PHP MySql搜索搜索查询中的每个单词
我正在使用PHP和mysqli从数据库中获取记录。如何使用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
表引擎=
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使用的表类型不支持全文索引