0

このように設定すると、$term変数内の複数の単語の結果が表示されます。$termメイン、セカンダリ、サブ列の間のスパン内のすべての単語にのみ一致する結果を引き出したい.

現在、$term「Hello World」の場合、データベースから結果が取得されます。

ID | メイン | セカンダリ | サブ

01 | ステートメント | こんにちは世界 | 何とか
02 | こんにちは | 調子はどう?| | ここに何でも
03 | ライフロック | ワールドワイドウェブ | ここで他に何か
04 | 世界のどこ | 彼女は挨拶した | ブレ

Hello And World の完全な $term が含まれているため、結果 01 と 04 のみを取得したい場合

これが私のコードです。こことGoogleで検索してみました。しかし、実際には、何を探すべきかわかりません。私が見つけたのは全文検索ドキュメントだけで、すでにここで実行しています。正確な結果を引き出す方法を言う人はいません。(sprintf が存在するのは、JSON 応答でそれを返すことができるようにするために必要だと思うからですか?

$query = sprintf("SELECT id, main, secondary, sub, 
    MATCH(main, secondary, sub) AGAINST('". $term ."' IN BOOLEAN MODE) AS score 
    FROM list_genres 
    WHERE MATCH (main, secondary, sub) AGAINST('". $term ."' IN BOOLEAN MODE)
    ORDER BY score DESC LIMIT 15");
4

2 に答える 2

0

私が間違っていなければ、デフォルトの動作はBOOLEAN MODEですOR+探している用語の前に記号を追加すると、うまくいくはずです。

$term = "+Hello +World"
于 2012-09-05T01:52:37.360 に答える
0

あなたの文章が間違っています。最初にsprintf()はパラメータとして用語を受け取り、SQLに追加したい場所ならどこでも %s を使用する必要があります+

コードは次のようになります。

$term = '+' . str_replace(' ',' +',$term); // Remove this line if you don't want search multiple terms
$query = sprintf("SELECT id,main,secondary,sub, MATCH(main, secondary, sub) AGAINST('&s' IN BOOLEAN MODE) as score 
    FROM list_genres WHERE MATCH (main, secondary, sub) AGAINST('%s' IN BOOLEAN MODE) 
    ORDER BY score DESC LIMIT 15", $term, $term); 
于 2012-09-05T01:54:06.037 に答える