使用多个非标准单词自动完成

时间:2015-07-29 12:22:02

标签: php jquery mysql autocomplete

我正在使用this script,我想修改/更新它以这种方式工作:

在我的数据库中,我有例如:hello world, my name is John。当我搜索Hello Worldorld, mname i时,我想要找到该项目,但如果我搜索world helloname John则无法查找该项目。所以,我正在寻找使其发挥作用的方法。有人能帮助我吗?

非常感谢

的index.php

<script type="text/javascript">
    $(function(){
        $(".search").keyup(function() { 
            var searchid = $(this).val();
            var dataString = 'search=' + searchid;
            if (searchid != '') {
                $.ajax({
                    type: "POST",
                    url: "search.php",
                    data: dataString,
                    cache: false,
                    success: function(html) {
                        $("#result").html(html).show();
                    }
                });
            }
            return false;    
        });

        jQuery("#result").live("click", function(e){ 
            var $clicked = $(e.target);
            var $name = $clicked.find('.name').html();
            var decoded = $("<div/>").html($name).text();
            $('#searchid').val(decoded);
        });

        jQuery(document).live("click", function(e) { 
            var $clicked = $(e.target);
            if (! $clicked.hasClass("search")){
                jQuery("#result").fadeOut(); 
            }
        });

        $('#searchid').click(function(){
            jQuery("#result").fadeIn();
        });
    });
</script>
<style type="text/css">
    body { 
        font-family: Tahoma, Geneva, sans-serif;
        font-size: 15px;
    }
    .content {
        width: 90%;
        margin: 0 auto;
    }
    #searchid { 
        width: 90%;
        border: solid 1px #000;
        padding: 10px;
        font-size: 14px;
    }
    #result {
        position: absolute;
        width: 70%;
        padding: 15px;
        display: none;
        margin-top: -1px;
        border-top: 0px;
        overflow: hidden;
        border: 1px #CCC solid;
        color: white;
        background-color: black;
    }
    .show {
        padding: 4px; 
        border-bottom: 1px #999 dashed;
        font-size: 12px; 
        height: 58px;
    }
    .show:hover {
        background: #4c66a4;
        color: #FFF;
        cursor: pointer;
    }
</style>

的search.php

<?php
    include('admin/db.php');
    if($_POST)
    {
        $q = $_POST['search'];
        $sql_res = mysql_query("select id, name, email, infos from autocomplete where name like '%$q%' or email like '%$q%' or infos like '%$q%' order by id LIMIT 100");
        while ($row = mysql_fetch_array($sql_res))
        {
            $username = $row['name'];
            $email = $row['email'];
            $infos = $row['infos'];
            $b_username = '<strong><font style="color: black; background-color: #ffff42">'.$q.'</strong></font>';
            $b_email = '<strong><font style="color: black; background-color: #ffff42">'.$q.'</strong></font>';
            $b_infos = '<strong><font style="color: black; background-color: #ffff42">'.$q.'</strong></font>';
            $final_username = str_ireplace($q, $b_username, $username);
            $final_email = str_ireplace($q, $b_email, $email);
            $final_infos = str_ireplace($q, $b_infos, $infos);
        ?>
        <div class="show" align="left">
            <span class="name">
                <?php echo $final_username; ?>
            </span>&nbsp;<br/>
            <?php echo $final_email; ?>
            </span>&nbsp;<br/>
            <?php echo $final_infos; ?><br/>
        </div>
    <?php }
} ?>

2 个答案:

答案 0 :(得分:1)

你应该看看levenshtein的功能。

http://php.net/manual/fr/function.levenshtein.php

尝试制作自己的算法,它会提高你的技能。

答案 1 :(得分:0)

我也是法国人! :d

在这里,您可以搜索&#34;名称为&#34;您在名称,电子邮件和信息栏中请求搜索所有包含&#34;名称的结果是&#34;。

如果你想逐字搜索,你需要在你的每个单词中使用一个boucle,在一个临时表中搜索查询存储结果并返回包含每个单词的所有结果。

可能还有其他解决方案:SQL SELECT WHERE field contains words