Ajax 使用单个输入框搜索多个参数


Ajax search for multiple parameters usng a single input box

尝试实现类似于此处的搜索。这将根据城市,地点,属性名称和构建器名称搜索属性。现在有一个较小的版本,它只搜索我附加城市名称的地方名称。

$(document).ready(function(){
        //alert("Entered");
        $("#searchId").keyup(function() 
        {
        var searchbox = $(this).val();
        var dataString = 'searchword='+ searchbox;
        if((searchbox=='') || (searchbox=='e.g') )
        {
            //$('#display').css('display') == 'none';
            $('#display').hide();
        }
        else
        {   
            if("#searchId".length>3)
        {
            $.ajax({
            type: "POST",
            url: "search.php",
            data: dataString,
            cache: false,
            success: function(html)
            {
                $("#display").html(html).show();    
                $(".name").click(function(){
                                    //  alert($(this).text());
                                            $("input#searchId").val($(this).text());
                                            $('#display').hide();
                                }); 
             }          
            });
        }
        }return false;    
        });                 
        });

在搜索中.php我有这样的查询,

$sql_res=mysql_query("select * from locality as loc inner join cities as cit on loc.city_id=cit.city_id where locality_name like '%$q%' or city_name like '%$q%' order by locality_id LIMIT 5");

但我希望它的功能类似于给出的链接。下拉列表应在前面显示所选条件的名称及其类型(例如:浦那(条件)城市(类型))。我怎样才能写一个sql语句和ajax/jquery函数来实现这一点?

编辑:为输入框添加 HTML

 <input type="text" autocomplete="off" class="homeinput ac_input" title="Search" id="searchId" name="SearchValue" value="e.g lodha new cuffe parade, thane mumbai" onFocus="if(this.value=='e.g lodha new cuffe parade, thane mumbai') this.value='';" onBlur="if(this.value=='') this.value='e.g lodha new cuffe parade, thane mumbai';">

谢谢你的时间。

在你看下面的代码之前,有几点需要注意:

  • 这看起来很糟糕地受到SQL注入的影响。在插入此查询之前无法看到您的 PHP 代码以及您要执行$q的操作......我只能说:小心。如果您没有验证$q的输入,我所要做的就是键入:"';放下表位置;"请注意,这在技术上是行不通的,因为mysql_query仅支持单个命令,但风险仍然存在
  • 此查询类型将不允许您使用索引,并且执行速度可能非常慢。考虑删除$q前的 %,以允许 MySQL 使用索引,或切换到具有部分单词索引功能的全文引擎。如果此表变得足够大,则可能会变得非常慢

但是,这是正确的方法:

(
    SELECT
      'Locality' AS `type`,
       `locality_name` AS `name`
    FROM
       `locality`
    WHERE
       `locality_name` LIKE '%$q%'
)
UNION ALL
(
    SELECT
       'City' AS `type`,
       `city_name` AS `name`
    FROM
       `cities`
    WHERE
       `city_name` LIKE '%$q%'
)

我认为你最好有两个不同的MySQL搜索。喜欢。。。

$sql_res=mysql_query("select * from locality as loc inner join cities as cit on loc.city_id=cit.city_id where locality_name like '%$q%' order by locality_id LIMIT 5");

然后第二个...

$sql_res=mysql_query("select * from locality as loc inner join cities as cit on loc.city_id=cit.city_id where city_name like '%$q%' order by locality_id LIMIT 5");

然后使用 php 将两个查询的结果简洁明了,每行末尾都有 [type]。你的jQuery真的不需要改变。