0

だから私はこのサイトに取り組んでいて、検索ボタンを追加しました。次のような単純な検索クエリを使用すると、すべてが正常に機能します

SELECT `student_id` FROM `student` WHERE `username` LIKE 'jo%' OR `firstname` LIKE 'jo%' OR `lastname` LIKE 'jo%' OR `surname` LIKE 'jo%' OR `email` LIKE 'jo%' 

これは、「username」、firstname、lastname などのフィールドを調べて、データベースから john に一致する名前を持つすべての ID を返します。

ただし、問題は、ユーザーが検索パラメーターの間にスペースを挿入すると (つまり、両方の名前で学生を検索していることを意味します)、結果が何もないことです。

これは、各フィールドで個別に検索パラメーター (「john doe」など) を探しているためだと考えました。

これを回避するにはどうすればよいですか。

4

5 に答える 5

2

これらをどのように処理したいのか正確にはわかりません。これを WHERE 句に追加して、間にスペースを入れて姓と名のフィールドを検索することもできます。

CONCAT(`firstname`, ' ', `lastname`) LIKE 'jo%'

または、ワイルドカードを削除して正確な検索を実行することもできます。

CONCAT(`firstname`, ' ', `lastname`) = 'jo'
于 2013-10-04T18:29:16.080 に答える
0

複数の列にまたがる検索/照合を行いたい場合は、MySQL の全文検索機能を調べる必要があります。開始するためのドキュメントについては、次のリンクを参照してください。

http://dev.mysql.com/doc/refman/5.5/en/fulltext-natural-language.html

LIKEこれは、多数の列にまたがるよりもはるかに優れたスケーリングを実現します。

于 2013-10-04T18:25:52.453 に答える
0

スペースが存在するということは、ユーザーが名前と姓の組み合わせを検索していることを意味すると考えることができます。(実際、UI はこれを示すことができます)。

次に使用します

$name = split(' ' , $incoming);

次に、$name[1] が存在するかどうかの条件付きチェックを作成し、検索するかどうかを決定します。

$where_clause = WHERE firstname = $name[0] AND lastname = $name[1];

それが失敗した場合は、次のようにフォールバックします。

$where_clause = WHERE firstname = $name[0] 

また

$where_clause = WHERE lastname = $name[1] 

等々。

次に、次のように使用します。

SELECT `student_id` FROM `student` . $where_clause

これはやや疑似コードですが、私が望む全体像が得られます。

このようなsql-builder.

于 2013-10-04T18:33:10.960 に答える
0
SELECT * FROM student 
    WHERE username LIKE REPLACE(username, ' ', '') = REPLACE("Twitt er", ' ', '')
于 2013-10-04T18:29:15.727 に答える
0

これを行うには、次の 2 つの方法があります。

1)あなたがしようとしているように

`

     $search_term= "Mike Brant";
      $term_part = preg_split('/ /', $search_term);
     /*
      term_part[0]=Mike
      term_part[1]=Brant
    */
     foreach($term_part as $value){
    $like. = " `username` LIKE '".$value."%' OR `firstname` LIKE '".$value."%' OR `lastname` LIKE '".$value."%' OR `surname` LIKE '".$value."%' OR `email` LIKE '".$value."%' OR "
    }
    $like = substr($like, 0, -3);
    $sql = "SELECT `student_id` FROM `student` WHERE ".$like.";
`

2) FULLTEXT 検索テーブル エンジン MYISAM を使用する FULLText について詳しく知る

FULLTEXT は検索アプリケーションに最適なオプションです

于 2013-10-04T18:43:55.263 に答える