2011-10-21 10 views
0

私は、MySQLデータベースを検索して結果を表示するPHPキーワード検索スクリプトを用意しています。現在、このスクリプトは、MySQLデータベースのフィールドに添付された単一のキーワードに基づいて結果を検索します。複数のキーワードをPHP/MySQLキーワードベースの検索に割り当てる

私の質問は、 1つのフィールドに複数のキーワードを付けて、それらのキーワードの1つ以上がユーザーのクエリで一致する場合、結果を返すにはどうすればよいですか?

データベースでキーワードを定義し、カンマで区切ることはできますか?例えばこれは、fulltext indexを使用し、フィールド

<?php 

mysql_connect("localhost","username","password"); 
mysql_select_db("database"); 

if(!empty($_GET['q'])){ 
$query=mysql_real_escape_string(trim($_GET['q'])); 
$searchSQL="SELECT * FROM questions WHERE `keywords` LIKE '%{$query}%' LIMIT 1"; 
$searchResult=mysql_query($searchSQL); 

while($row=mysql_fetch_assoc($searchResult)){ 
$results[]="{$row['result']}"; 
} 

echo implode($results); 
} 

?> 

答えて

2

のどちらかで、あること、または化合物にキーワードリストを分割するだろう「どこのような...など...など...」声明:

$keywords = explode(' ', $_GET['q']); 
$likes = array() 
foreach($keywords as $kw) { 
    $kw = mysql_real_escape_string($kw); 
    $likes[] = "keywords LIKE '%{$kw}%'"; 
} 

$sql = "SELECT ... WHERE " . implode(' OR ', $likes); 

リレーショナルデータベースの単一フィールド内の化合物のデータを保存するには、あなたが全体のフィールドのサブ部分にアクセスする必要があるとしている場合は特に、めったに良いアイデアではありません。キーワードはレコードごとに1つのキーワードとして別のテーブルに格納する必要があります。次に、リンクテーブルを使用して、複数のキーワードを親テーブルの個々のレコードに関連付けることができます。

+0

@Callum Whyte、これは完全なコード例です。 '%%'は索引付けされていないので、可能ならばフルテキスト検索を実際に使用するべきです。 –

関連する問題