搜索以“反向”顺序返回没有结果
Posted
技术标签:
【中文标题】搜索以“反向”顺序返回没有结果【英文标题】:Search returning no results in "reverse" order 【发布时间】:2021-09-29 01:16:17 【问题描述】:我有一个充满地址的数据库。 6 列(id、Name、Address、City、State、Zip、dt)
我的代码使用 ajax 运行以进行实时搜索。目前,我主要可以通过查询找到我要查找的内容。我遇到的问题是这个。如果我搜索“90210 Steve Jones”我没有得到任何结果,但如果我搜索“Steve Jones 90210”它会找到行。
这是我的代码:
$query = "SELECT * FROM db";
if($_POST['query'] != '')
$postq = mysql_real_escape_string($_POST['query']);
$query .= "WHERE CONCAT(Name,Address,City,State,Zip) LIKE '%".str_replace(' ', '%', $postq)."%'";
$query .= 'ORDER BY Name ASC, dt DESC ';
$statement = $connect->prepare($query);
$statement->execute();
任何帮助将不胜感激
【问题讨论】:
like 运算符不会混合单词的顺序。也许Is there a combination of like and in sql 会回答你的问题。 胡安,我已将所有列设置为全索引,结果没有改变。 【参考方案1】:其中一种解决方案是将搜索字符串用空格分割,然后进行多重比较操作
所以代码是:
<?php
if($_POST['query'] != '')
$postq = mysql_real_escape_string($_POST['query']);
$pieces = explode(" ", $postq);
$index=0;
$substring="";
while ($index < count($pieces))
$substring .=" CONCAT(Name,Address,City,State,Zip) like '%" . $pieces[$index] . "%'" ;
if ($index !=count($pieces)-1)
$substring .= " and ";
$index++;
$query = "SELECT * FROM db where ";
$query .= $substring;
$query .= ' ORDER BY Name ASC, dt DESC ';
$statement = $connect->prepare($query);
$statement->execute();
?>
【讨论】:
谢谢!这正是我所需要的,但无法将我的大脑包裹起来。荣誉【参考方案2】:您可以按空格分解查询并测试每个空格。
$query = "SELECT * FROM db";
$where = [];
$values = [];
$ss = [];
if($_POST['query'] != '')
foreach( explode(' ', $_POST['query']) as $p)
$postq = mysql_real_escape_string($p);
$where[]= "(CONCAT(Name,Address,City,State,Zip) LIKE ? )";
$values[] = "%$postq%";
$ss[]='s';
$query .= " WHERE " . implode(" OR ", $where);
$query .= ' ORDER BY Name ASC, dt DESC ';
$statement = $connect->prepare($query);
if(count($values)>0) $statement->bind_param(implode('',$ss), ...$values);
$statement->execute();
【讨论】:
我已经尝试实现此代码,但它根本没有检索到任何结果。很可能只是不同意此 ajax 代码的其余部分进行显示。以上是关于搜索以“反向”顺序返回没有结果的主要内容,如果未能解决你的问题,请参考以下文章
如果ElasticSearch中没有搜索参数,搜索结果的默认顺序是什么
如何将Woocommerce搜索结果顺序更改为从低到高的价格
2023-01-15:销售员。编写一个SQL查询,报告没有任何与名为 “RED” 的公司相关的订单的所有销售人员的姓名。以 任意顺序 返回结果表。 DROP TABLE IF EXISTS `com