【问题标题】:php ajax autocomplete - exact matches are missingphp ajax 自动完成 - 缺少完全匹配
【发布时间】:2020-02-16 23:54:46
【问题描述】:

我有一个简单的 PHP/MySQL/Ajax 自动完成应用程序,它在用户输入时显示可用地址(就像谷歌地图一样)。

应用程序工作并显示结果

一旦用户开始添加属性编号,结果就会发生变化(例如 260 和 269 消失了)

如果用户添加额外的数字,则只有 1 个结果(数字 270-277 消失了)

PMA 中的查询(存在记录)

这是我从数据库中获取数据的代码

        $search_param = "%{$this->text}%";

        $query = 'SELECT * FROM (SELECT * FROM '.$this->table.' WHERE address like ?) AS x LIMIT 5,5';

        $stmt = $this->conn->prepare($query);
        $stmt->bindParam(1,$search_param);
        $stmt->execute();

然后将结果保存到数组中

            while($row = $stmt->fetch(PDO::FETCH_ASSOC)){
                extract($row);
                $address_item = array(
                    'address' => $address
                );

            //Push the data
            array_push($address_arr['data'], $address_item);

            }

【问题讨论】:

  • 检查结果后请去掉限制条件
  • 请注意,SQL 结果集是 orderless 根据定义意思是 LIMIT 5,5 没有确定性 ORDER BY 条件几乎是 meaningless.. 作为分页 / SQL 中的批处理总是需要确定性排序,没有例外..
  • ...您也可以考虑使用FULLTEXT 索引和WHERE MATCH (...) AGAINST(....),因为WHERE LIKE '%..%' 永远不能使用索引

标签: javascript php mysql ajax autocomplete


【解决方案1】:

试试这个查询:

$query = 'SELECT * FROM (SELECT * FROM '.$this->table.' WHERE address like ?) AS x LIMIT 0,5';

【讨论】:

  • 仅代码的答案被认为是低质量的:请务必说明您的代码的作用以及它如何解决问题。如果您可以在帖子中添加更多信息,它将帮助提问者和未来的读者。另请参阅解释完全基于代码的答案:meta.stackexchange.com/questions/114762/…
猜你喜欢
  • 2015-12-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-23
  • 1970-01-01
  • 2012-05-14
  • 1970-01-01
  • 2017-03-03
相关资源
最近更新 更多