4

現在、以下のような mysql ステートメントを使用して投稿タイトルを検索しています。

select * from table where title like %search_term%

しかし、問題は、タイトルが次のようAcme launches 5 pound burgerで、ユーザーが を検索した場合Acme、結果が返されることです。Acme burgerしかし、ユーザーがorを検索した場合Acme 5 pound、何も返されません。

ユーザーが複数の単語を検索したときに結果を返すようにする方法はありますか? ここで使用するのはLIKE正しいものですか、それとも他に使用できるものはありますか?

4

5 に答える 5

5

テキスト コレクションに対して文字列を検索するには、MATCH() と AGAINST() を使用します。

SELECT * FROM table WHERE MATCH(title) AGAINST('+Acme burger*')

または、RLIKEではない理由

SELECT * FROM table WHERE TITLE RLIKE 'Acme|burger'

または、配列を検索して $keys をコンパイルする LIKE

$keys=array('Acme','burger','pound');
$mysql = array('0');
foreach($keys as $key){
    $mysql[] = 'title LIKE %'.$key.'%'
}
SELECT * FROM table WHERE '.implode(" OR ", $mysql)
于 2013-04-07T07:40:27.813 に答える
0

最良のことは、空白に基づいて検索文字列を分割することにより、ユニオン操作を実行することです。

アクメ 5 ポンド、

SELECT * FROM TABLE WHERE TITLE LIKE '%ACME 5 POUND%'
UNION
SELECT * FROM TABLE WHERE TITLE LIKE '%ACME%'
UNION
SELECT * FROM TABLE WHERE TITLE LIKE '%5%'
UNION
SELECT * FROM TABLE WHERE TITLE LIKE '%POUND%'

最初のクエリを優先する方法を見つけてください。または、上記のクエリを 4 つの個別のクエリとして、優先度を付けて渡します。データベースへのフロント エンド tp パス クエリを使用していると思うので、簡単に使用できるはずです。

于 2013-04-07T07:38:17.187 に答える
0
<?php
$search_term = 'test1 test2 test3';
$keywords = explode(" ", preg_replace("/\s+/", " ", $search_term));
foreach($keywords as $keyword){
 $wherelike[] = "title LIKE '%$keyword%' ";
}
$where = implode(" and ", $wherelike);

$query = "select * from table where $where";

echo $query;
//select * from table where title LIKE '%test1%' and title LIKE '%test2%' and title LIKE '%test3%' 
于 2013-04-07T07:38:44.720 に答える
0

必要なことは、たとえば次のような SQL を作成することです。

select * from table where title like "%Acme%" and title like "%burger%"

つまり、文字列を分割し、like各部分に 1 つ作成します。スペースを に置き換えても機能する可能性がありますが%、それについてはわかりません。

于 2013-04-07T07:31:36.327 に答える