1

私は次のコードを持っていますが、このコードはデータベース内の正確な一致に対してのみ機能します。たとえば、「John Jones」を検索したい場合、同じ名前の他のユーザーと一緒に彼の名前を入力すると表示されますドロップダウンで、姓の 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

MySQL で MyISAM または InnoDB エンジンを使用している場合は、組み込みの全文検索機能の一部を使用できます。

次のようなことができます。

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

これは、たとえば、PHP API や Ajax を使用して入力と同時に検索機能を構築する場合に非常に便利です。

これらについて必ず読んでください。おそらく、DB で 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 に答える
0

代わりに、SQL クエリで LIKE を使用する必要があります。

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

于 2012-07-09T02:54:50.973 に答える