1

検索エンジン用に次のコードがあります。

    if(isset($_POST['search']))
    {
        $search = $_POST['search'];
        $terms = explode(",", $search);
        $projectlistquery = "
            SELECT project.accid, customer.custid, projectid, project.datefrom, custnamecode, dateto, daluur, project.gebruikersid, gebruikers.gebruikersid, 
            type, typeid, typename, custsurname, custmidname, custforename, acc1cust, acc2date, acc3nrofproj, acc4user, project.crew, project.jobinstr, project.projectinfo, usersurname, usermidname, userforename
            FROM project
                INNER JOIN type on project.type = type.typeid
                INNER JOIN customer on project.custid = customer.custid
                INNER JOIN accountingcode on project.accid = accountingcode.accid
                INNER JOIN gebruikers on project.gebruikersid = gebruikers.gebruikersid         
            WHERE
        ";
        $i = 0;
        foreach ($terms as $each) 
        {
            if ($i++ > 0) 
            $projectlistquery .= ' OR ';

            $projectlistquery .= "concat(custsurname, custforename, custmidname, custpostal, custphone1, custphone2, custfax, custnamecode, acc1cust, acc2date, acc3nrofproj, acc4user, typename, usersurname, usermidname, userforename) LIKE '%$each%' ";
        }
        $projectlistquery .= " ORDER BY projectid ";
    }
    else
    $projectlistquery= "    // query to show all records.

これで、1 つのキーを検索するのに問題なく動作します。

Hans van Meulen という名前を検索すると、Hans を含むすべての名前、'van' が含まれるすべての名前、および Meulen が表示されます。したがって、私のデータベースに Dude van Berkel があれば、彼も表示されます。そして、3つの文字列をまとめて検索したいです。

これは IMPLODE で達成できますか? $terms = implode(",", $search); ただし、'ORDER BY projectid' で MySQL 構文エラーを返します。
または、SQL を調整する必要がありますか?

4

1 に答える 1

1

explode(",", $search);検索文字列が損なわれないように、その部分を削除するだけです。あなたが今やっていることは、基本的にすべての単語を検索するためにそれをバラバラにすることです。検索文字列として「Hans van Meulen」が表示されます。

于 2012-10-22T08:45:01.840 に答える