1

我有以下代码,但此代码仅适用于数据库中的精确匹配,我想要的是例如你想搜索“约翰琼斯”,如果你只输入 joh 他的名字以及其他同名用户将出现在下拉列表中,以及姓氏的 jone。我已经尝试了几个“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>
4

2 回答 2

0

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

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

于 2012-07-09T02:54:50.973 回答
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

于 2012-07-09T03:32:19.830 回答