微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

PHP和MySQL实时搜索

我目前正在实时搜索中直接显示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:我知道这不是从数据库中读取数据的最佳方法,因为它存在一些安全问题,我将在以后更改它,因为这是我很久以前写的一个旧脚本,我对此更感兴趣工作正常,之后我将更改方法.

解决方法:

未经测试的代码,但可以根据您的需要进行修改,

$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] 举报,一经查实,本站将立刻删除。

相关推荐