我用人搜索代码,它的工作,但我得到的搜索结果,这是非常缓慢的希望有人在这里可以做得比我更好,请给反馈。我会把代码写下来的。
这是javascript代码。
<script>
function lightbg_clr() {
$('#qu').val("");
$('#textbox-clr').text("");
// $('#search-layer').css({"width":"30%"});
// $('#livesearch').css({"display":"none"});
$("#qu").focus();
};
function fx(str)
{
var s1=document.getElementById("qu").value;
var xmlhttp;
if (str.length==0) {
document.getElementById("livesearch").innerHTML="";
// document.getElementById("livesearch").style.border="0px";
// document.getElementById("search-layer").style.width="auto";
// document.getElementById("search-layer").style.height="auto";
// document.getElementById("livesearch").style.display="block";
$('#textbox-clr').text("");
return;
}
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
document.getElementById("livesearch").innerHTML=xmlhttp.responseText;
// document.getElementById("search-layer").style.width="50%";
// document.getElementById("search-layer").style.height="50%";
// document.getElementById("livesearch").style.display="block";
$('#textbox-clr').text("X");
}
}
xmlhttp.open("GET","../validate/call_ajax.php?n="+s1,true);
xmlhttp.send();
}
</script>
这是我的html代码
<div class="bk">
<input type="text" onKeyUp="fx(this.value)" autocomplete="on" name="qu" id="qu" class="textbox" placeholder="What are you looking for ?" tabindex="1">
<button type="submit" class="query-submit" tabindex="2"><i class="fa fa-search" style="color:#001150; font-size:20px"></i></button>
<div id="livesearch"></div>
</div>
这是获取php代码
在这里,我使用数据库并从两个具有相同用户id的不同表中获取数据
<?php
include('../db/mySqlDBi.class.php');
$dbConn = new mySqlDB();
$s1=$_REQUEST["n"];
$select_query=
"SELECT *
FROM u_info_one as uio, u_info_two as uit
WHERE
uio.u_id=uit.u_id
AND u_fname LIKE '%".$s1."%'
AND uio.`u_id`!='{$_SESSION["u_id"]}'
AND `u_flag`!='0'";
$sql=$dbConn->selector($select_query);
$s="";
while($row=mysqli_fetch_array($sql))
{
$s=$s."
<a class='link-p-colr' href='user-profile.php?user_id=".$row['u_id']."'>
<div class='live-outer'>
<div class='live-im'>";
if($row['u_image']!="") {
$s=$s."<img src='".$row['u_image']."' alt=\"\">";
}else {
$s=$s."<img src=\"../images/male-avatar1.png\" alt=\"\">";
}
$s=$s."</div>
<div class='live-product-det'>
<div class='live-product-name'>
<p>".$row['u_fname']." ".$row['u_lname']."</p>
</div>
</div>
</div>
</a>
";
}
echo $s;
?>
2条答案
按热度按时间g0czyy6m1#
您搜索的所有数据库字段是否都已正确索引?
您真的需要两个数据集(assoc和numbered)吗。如果没有,只切换到assoc。
你能用一个连接代替两个表吗
如果不需要所有字段,请只选择需要的字段。
fjnneemd2#
正如@arkascha所评论的:使用like对性能没有好处。。。也就是说,这里有一些针对您的用例的可能优化。
1) 使用实连接
您希望使用连接,而不是老式的带有where子句的交叉连接;根据您的rdbms和数据,这可能会表现得更好。
2) 使用相关数据类型
您正在比较字符串,但看起来u\u标志应该是一个数字字段,可能是一个tinyint(1)。较小的数据类型使搜索速度更快,比较数字通常比字符串更有效。检查表中此字段的定义。
3) 索引搜索标准
您需要在两个表中搜索列的索引。我无法准确地判断哪些列属于哪个表,因为并不是所有标识符都被引用,但每个表有一个(可能是复合)索引就可以了,比如:
以下是您的最新查询: