限制PHP中即时搜索的结果?

时间:2013-04-27 15:45:57

标签: php mysql ajax

我创建了一个搜索栏,用于在我的数据库中搜索用户,我将在下面分享我的代码。但有一个问题是,如果我在一个表中有5个用户,它会显示这5个用户,但是如果我有1,000个用户,则显示所有1,000个用户。

无论我试图限制它,它都没有用。有时它会完全杀死PHP脚本。

有谁知道如何解决这个问题,并且从下面的代码中仅限每个搜索查询显示5个结果?

HTML INPUT和AJAX SCRIPT

<input id="text" type="text" name="text" onkeyup="showHint(this.value)" autocomplete="off" />
<div id="inner" class="inner"></div>
<script>
  function showHint(str) {
    if (str.length==0) {
      document.getElementById("inner").innerHTML="You haven't search. Please have :D";
      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("inner").innerHTML=xmlhttp.responseText;
      }
    }
    xmlhttp.open("REQUEST","searchquery.php?text="+str,true);
    xmlhttp.send();
  }
</script>

AND searchquery.php

<?
  $text = $_REQUEST['text'];
  $text = preg_replace('#[^a-z0-9]#i', '', $text);
  function connect($database) {
    mysql_connect('localhost','root','');
  mysql_select_db($database);
  }
  connect('developing');
  $query = "SELECT * FROM users WHERE first_name LIKE '%$text%' OR last_name LIKE '%$text%'";
  $action = mysql_query($query);
  $result = mysql_num_rows($action);
  if ($result == 0) {
    $output = "User does not exist...";
  }else{
    while ($row = mysql_fetch_array($action)) {
      $output .= '<div class="output"><img src="/'.$row['avatar'].'"><a href="#">'.$row['first_name'].' '.$row['last_name'].'</div><br />';
    }
  }
  echo $output;
?>

有人能看到一些关于如何制定限制的解决方案吗?

1 个答案:

答案 0 :(得分:4)

在查询中使用LIMIT

SELECT * 
FROM users 
WHERE first_name LIKE '%$text%' 
OR last_name LIKE '%$text% 
LIMIT 5'