在搜索中包含可能的搜索名称下拉列表

时间:2012-07-09 02:22:12

标签: php mysql search

我有以下代码,但是此代码仅适用于db中的EXACT匹配,我想要的是例如你想搜索" John Jones",如果你只输入他的名字和他的名字其他同名用户将显示在下拉列表中,并且会显示姓氏。 我试过几个喜欢' LIKE'功能,但我似乎无法弄明白。 谢谢!

<?php
    include ('core/init.php');

    logged_in_redirect();

    if(empty($_POST['friend_search'])) {
        header('Location: friends.php');
    }
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
    <head>

        <title> My Friends</title>
        <link href='css.css' rel='stylesheet' type='text/css'/>
    </head>
    <body class='home-body'>
        <?php include_once("core/analyticstrackingcode.php") ?>
        <div class='whitebg'>
            <?php include('core/navbar.php'); ?>
            <?php
                $friend = $_POST['friend_search'];
                $found=0;
                $search = mysql_query("SELECT * FROM users");
                while($row = mysql_fetch_array($search)) {
                    $possible_match_name = $row['first_name'];
                    $possible_match_id = $row['id'];
                    $possible_match_email = $row['email'];
                    $possible_match_profilepic = $row['profilepic'];
                    $this_users_email = $_SESSION['email'];
                    if($possible_match_email!=$this_users_email) {
                        if($friend==$possible_match_email) {
                            echo "
                                <html>
                                    <div class='friendsearchentries'>
                                        <img src='$possible_match_profilepic' class='friend-match-prof-pic' />
                                        <a href='confirm_send.php?id=$possible_match_id' class='friend-match-link' ><center>".$possible_match_name."</center></a>
                                    </div>
                                </html>";
                                $found=1;
                        }
                    }
                }
                if($found==0) {
                    echo "Sorry, we found no matches.";
                }
            ?>
        </div>
    </body>
</html>

2 个答案:

答案 0 :(得分:0)

您应该在SQL查询中使用LIKE:

http://www.mysqltutorial.org/sql-like-mysql.aspx

答案 1 :(得分:0)

如果你在MySQL中使用MyISAM或InnoDB引擎,你可以使用一些内置的全文搜索功能。

你可以做以下的事情:

"SELECT * FROM users WHERE MATCH (first_name, email) AGAINST ('john jones' IN BOOLEAN MODE)"

这对于使用PHP API和Ajax构建“按需搜索”类型的功能非常有用。

绝对有关于这些的阅读,你可能需要与你的数据库做一些工作,以确定它是在运行MyISAM还是InnoDB,以及可能的一些配置。

http://dev.mysql.com/doc/refman/5.6/en/fulltext-search.html

http://dev.mysql.com/doc/refman/5.6/en/fulltext-boolean.html