【发布时间】:2016-05-09 17:42:55
【问题描述】:
我目前正在进行实时搜索,该搜索直接显示来自 mysql 数据库的结果。
代码有效,但不是我想要的。
让我们从一个例子开始,这样更容易理解:
我的数据库有 5 列:
id, link, description, try, keywords
在 key up 上运行 ajax 请求的脚本如下:
$("#searchid").keyup(function () {
var searchid = encodeURIComponent($.trim($(this).val()));
var dataString = 'search=' + searchid;
if (searchid != '') {
$.ajax({
type: "POST",
url: "results.php",
data: dataString,
cache: false,
success: function (html) {
$("#result").html(html).show();
}
});
}
return false;
});
});
results.php 文件看起来是这样的:
if ($db->connect_errno > 0) {
die('Unable to connect to database [' . $db->connect_error . ']');
}
if ($_REQUEST) {
$q = $_REQUEST['search'];
$sql_res = "select link, description, resources, keyword from _db where description like '%$q%' or keyword like '%$q%'";
$result = mysqli_query($db, $sql_res) or die(mysqli_error($db));
if (mysqli_num_rows($result) == 0) {
$display = '<div id="explainMessage" class="explainMessage">Sorry, no results found</div>';
echo $display;
} else {
while ($row = $result->fetch_assoc()) {
$link = $row['link'];
$description = $row['description'];
$keyword = $row['keyword'];
$b_description = '<strong>' . $q . '</strong>';
$b_keyword = '<strong>' . $q . '</strong>';
$final_description = str_ireplace($q, $b_description, $description);
$final_keyword = str_ireplace($q, $b_keyword, $keyword);
$display = '<div class="results" id="dbResults">
<div>
<div class="center"><span class="">Description :</span><span class="displayResult">' . $final_description . '</span></div>
<div class="right"><span class="">Keyword :</span><span class="displayResult">' . $final_keyword . '</span></div>
</div>
<hr>
</div>
</div>';
echo $display;
}
}
}
现在,假设我的数据库中有这一行:
id = 1
link = google.com
description = it's google
totry = 0
keywords: google, test, search
如果我在搜索栏中输入:
google, test
我有正确的结果,但如果我输入:
test, google
我没有结果,显然顺序是错误的。 所以基本上,我想要实现的是更像“标签”的东西,这样我就可以搜索正确的关键字而不必使用正确的顺序。
我可以用我当前的代码来做吗(如果是,怎么做?)或者我需要改变一些东西?
提前感谢您的任何建议。
PS:我知道这不是从数据库读取的最佳方式,因为它存在一些安全问题,我稍后会更改它,因为这是我多年前编写的旧脚本,我更感兴趣让它正常工作,之后我将改变方法。
【问题讨论】: