该代码有效,但并非如我所愿.
让我们从一个示例开始,以便更容易理解:
我的数据库有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;
});
});
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:我知道这不是从数据库中读取数据的最佳方法,因为它存在一些安全问题,我将在以后更改它,因为这是我很久以前写的一个旧脚本,我对此更感兴趣工作正常,之后我将更改方法.
解决方法:
$q = $_REQUEST['search'];
$q_comma = explode(",", $q);
$where_in_set = '';
$count = count($q_comma);
foreach( $q_comma as $q)
{
$counter++;
if($counter == $count) {
$where_in_set .= "FIND_IN_SET('$q','keywords')";
}else {
$where_in_set .= "FIND_IN_SET('$q','keywords') OR ";
}
}
$sql_res = "select link, description, resources, keyword from _db where $where_in_set or description like '%$q%'";
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。