【问题标题】:Auto complete suggestion box are not working properly?自动完成建议框无法正常工作?
【发布时间】:2018-03-01 11:52:45
【问题描述】:

代码:

<?php
  include('config.php');
  $return_arr = array();
  $term = $_GET['term'];
  $term = str_replace('.','',$term);
  $sql = "SELECT * FROM submission where keyword like '%".$term."%' or companyname like '%".$term."%' ORDER BY CASE WHEN keyword LIKE '%".$term."%' THEN 1
  ELSE 2 END";
  $r = mysqli_query($link,$sql);
  while($row = mysqli_fetch_assoc($r))
  {
    $key = explode(",", $row['keyword']);
    foreach ($key as $keyword) 
    {
      $return_arr[] = $keyword;
    }  
  }
  echo json_encode($return_arr);
?>

在我的代码中,我创建了一个自动完成的建议框并且它可以工作,但是如果我写 (i) 它总是显示错误的结果,它总是用 (a) 字母显示结果,为什么不 (i) 并且还想用简短的搜索姓名。那么,我该怎么做呢?请帮帮我。

谢谢

【问题讨论】:

  • 如果你去掉第一个 % 那么它需要从 i 开始
  • 分享搜索结果的例子,如果你有aaai,那么ia会同时显示,aaai会先出现,就像aaai,ia一样
  • 您的意图是:当您编写 (i) 时,您想要以 (i) 开头的结果,或者它包含 (i) 就足够了。因此,它依赖于您的 sql 部分 ...like '%i%'... like 'i%'
  • 那个 ^ - 因为第一个 % - 放弃它!
  • @delboy1978uk 是真的!

标签: php mysql autocomplete


【解决方案1】:

如果您想比较结果start with 输入字符,则从开头删除%

$sql = "SELECT * FROM submission where keyword like '".$term."%' or companyname 
like '".$term."%' ORDER BY CASE WHEN keyword LIKE '".$term."%' THEN 1
ELSE 2 END";

【讨论】:

  • @omkara 你确定你删除了两个相似部分的前面的 % 吗?因为在@"B. Desai" 的解决方案中,or companyname like '%".$term."%' 仍然有前面的 %。
  • luba 是对的,我忘记在一个地方删除 % 立即尝试
  • @omkara 这无关紧要,但我也建议您使用 ilike 来搜索不区分大小写的内容。
【解决方案2】:

您在查询中使用了%$term%。因此数据是否将搜索到的关键字存储在字符串中的任何位置,它都会显示给您。因此,如果您想搜索以特定字符开头的数据,请从查询的开头删除 % 以使其成为 $term% as

$sql = "SELECT * FROM submission where keyword like '".$term."%' or companyname 
like '".$term."%' ORDER BY CASE WHEN keyword LIKE '".$term."%' THEN 1
ELSE 2 END";

【讨论】:

  • 没有变化它返回相同的结果@RAUSHAN KUMAR :(
  • @omkara 所以基本上你想要什么,结果要么包含那个字符,要么以开头,要么以结尾?
  • 我想要以@RAUSHAN KUMAR 开头的结果
  • 因此,如果您按字符 i,它将向您显示关键字以 a 开头或公司名称以 a 开头的结果?是..?
  • 你能添加你得到的输出吗?
猜你喜欢
  • 2012-03-18
  • 2011-09-16
  • 2014-05-18
  • 2020-10-12
  • 2018-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多