尝试实现类似于 here 的搜索。这会根据城市、地点、特性名称和建筑商名称搜索特性。现在有一个较小的版本,它仅搜索我附加城市名称的地点名称。
$(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");
但我希望它的功能与给定的链接类似。下拉列表应显示所选条件的名称及其前面的类型(例如:浦那(条件)城市(类型)) .如何编写 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 注入(inject)的影响。在插入此查询之前无法看到您的 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%'
)
关于php - 使用单个输入框 Ajax 搜索多个参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11063076/