实时数据搜索问题,如何通知用户在搜索中更具体

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了实时数据搜索问题,如何通知用户在搜索中更具体相关的知识,希望对你有一定的参考价值。

我正在尝试利用我在网上利用php,ajax和json找到的实时搜索演示,并希望对代码进行一些细微的修改,要求用户在查询中“更具体”,以免查询整个数据库。

我想将返回查询限制为不超过50条记录,如果查询的数量多于通知给用户的话。

这是我试图修改的来源(https://howtodecode.com/php/how-to-create-php-live-search-with-ajax-for-website/)。

在我下面的代码中,我试图修改json,但我不知道它的实现,所以我正在努力解决代码中的错误。

我在RESPONSE“{”F_NAME“中看到以下内容:”...请缩小搜索范围,显示太多记录。“,”L_NAME“:”“}”。这似乎是正确的,但我无法正确解析它。

我发现“没有找到数据”。

    <?php
require_once('../TestSearch/Connections/Shop.php');

//fetch.php

$query = '';

if(isset($_POST["query"]))
{
 $search = str_replace(",", "|", $_POST["query"]);
 $query = "
 SELECT F_NAME, L_NAME, JOB_NO, CUST_NO, DESCRIPTIN, JOB_TYPE FROM line_job 
 WHERE F_NAME REGEXP '".$search."' 
 OR L_NAME REGEXP '".$search."' 
 OR JOB_NO REGEXP '".$search."' 
 OR CUST_NO REGEXP '".$search."' 
 OR DESCRIPTIN REGEXP '".$search."'
  OR JOB_TYPE REGEXP '".$search."'
 ";
}
else
{
 $query = "
 SELECT F_NAME, L_NAME, JOB_NO, CUST_NO, DESCRIPTIN, JOB_TYPE FROM line_job WHERE line_job = 47779
 ";
}

$result = $mysqli -> query($query);

if(mysqli_num_rows($result) > 50)
{
    $data = ['F_NAME' => '...please narrow your seach, too many records to display.','L_NAME' => ''];
    echo json_encode($data);
}else{
    while($row = mysqli_fetch_array($result))   
    {
     $data[] = $row;
    }
    echo json_encode($data);
}
?>

这是脚本

<script>
$(document).ready(function(){

 load_data();

 function load_data(query)
 {
  $.ajax({
   url:"fetch.php",
   method:"POST",
   data:{query:query},
   dataType:"json",
   success:function(data)
   {
    $('#total_records').text(data.length);
    var html = '';
    if(data.length > 0)
    {
     for(var count = 0; count < data.length; count++)
     {
      html += '<tr>';
      html += '<td>'+data[count].F_NAME+'</td>';
      html += '<td>'+data[count].L_NAME+'</td>';
      html += '<td>'+data[count].JOB_NO+'</td>';
      html += '<td>'+data[count].CUST_NO+'</td>';
      html += '<td>'+data[count].DESCRIPTIN+'</td>';
      html += '<td>'+data[count].JOB_TYPE+'</td></tr>';
     }
    }
    else
    {
     html = '<tr><td colspan="5">No Data Found</td></tr>';
    }
    $('tbody').html(html);
   }
  })
 }

 $('#search').click(function(){
  var query = $('#tags').val();
  load_data(query);
 });

});
</script>
答案

我能够通过稍微重新编码php并将查询结果限制为50来解决我的问题。

<?php
require_once('../TestSearch/Connections/Shop.php');

//fetch.php

$query = '';

if(isset($_POST["query"]) and !empty($_POST["query"]))
{
 $search = str_replace(",", "|", $_POST["query"]);
 $query = "
 SELECT F_NAME, L_NAME, JOB_NO, CUST_NO, DESCRIPTIN, JOB_TYPE FROM line_job 
 WHERE F_NAME REGEXP '".$search."' 
 OR L_NAME REGEXP '".$search."' 
 OR JOB_NO REGEXP '".$search."' 
 OR CUST_NO REGEXP '".$search."' 
 OR DESCRIPTIN REGEXP '".$search."'
  OR JOB_TYPE REGEXP '".$search."'
 LIMIT 50
 ";
}
else
{
// if the form is submitted with no search criteria ""
$data = "";
echo json_encode($data);    
exit;
}


$result = $mysqli -> query($query);
//determine if the query returned a result or are there no records that match
$rowcount=mysqli_num_rows($result); 

if($rowcount > 0){

while($row = mysqli_fetch_array($result))   
{
 $data[] = $row;
}
echo json_encode($data);

}
else
{
$data = "";
echo json_encode($data);
}


?>

以上是关于实时数据搜索问题,如何通知用户在搜索中更具体的主要内容,如果未能解决你的问题,请参考以下文章

如何在firebase中处理推送通知

如何在数据表中的搜索框中输入值

大型数据库实时索引的最佳实时搜索平台?

如何获取 selectpicker 实时搜索的输入

如何使用 Redis 和地理邻近搜索在同一位置找到两个用户?

天猫11.11:搜索引擎实时秒级更新