0

ここに似た検索を実装しようとしています。これは、都市、地域、プロパティ名、およびビルダー名に基づいてプロパティを検索します。現在、都市名を追加する地域名のみを検索する小さなバージョンが機能しています。

$(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;    

        });                 

        });

search.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");

しかし、私はそれが与えられたリンクと同様に機能することを望んでいます.ドロップダウンは、選択された基準の名前とそのタイプを前に表示する必要があります. /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';">

時間をありがとう。

4

2 に答える 2

1

2 つの異なる 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");

それから2番目...

$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 を実際に変更する必要はありません。

于 2012-06-16T11:45:50.623 に答える
1

以下のコードを見る前に、注意すべき点がいくつかあります。

  • これは、SQL インジェクションの影響を受けやすいようです。PHP コードと、このクエリに挿入する前に $q を実行する方法を確認できない場合は、注意が必要です。$q の入力を検証していない場合は、「'; DROP TABLE localities;」と入力するだけです。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%'
)
于 2012-06-16T12:41:28.643 に答える