次のコードを Jquery オートコンプリートと共に使用して、サイトに検索候補を入力しています。
$results = mysql_query('SELECT DISTINCT artist FROM mm_albums WHERE artist LIKE "'. mysql_real_escape_string($_REQUEST['term']) .'%" ORDER BY artist ASC LIMIT 0,10', $dbcon);
$data = array();
if ( $results && mysql_num_rows($results) )
{
while( $row = mysql_fetch_array($results, MYSQL_ASSOC) )
{
$data[] = array(
'label' => $row['artist'],
'value' => $row['artist']
);
}
}
echo json_encode($data);
flush();
これは正常に機能していますが、複数の列でさまざまな結果を検索できるようにしたいと考えています。
アーティスト欄のアーティスト名
名前列のトラック名
レーベル列からのレコードレーベル
2 時間かけてさまざまな方法を読みましたが、どれも私がやろうとしていることにまったく適しておらず、クエリを正しくフォーマットするのに問題があります。
誰か提案はありますか?
--ソリューションを追加するために以下を編集--
これは、他の誰かがこれをやろうとしている場合に備えて、Ed の提案のおかげでうまく機能する方法です。
これにより、2 つの異なるテーブルから 4 つの異なる列が検索され、ユーザーが入力した検索語と、それらのいずれかで見つかったものとが一致し、重複した結果が削除されます。これはJQuery Autocompleteで問題なく動作します。セットアップ方法は次のとおりです。
1) 次の php ファイルを作成し、名前を付けます。search.php
<?php
if ( !isset($_REQUEST['term']) )
exit;
$connect = mysql_connect('dbhost', 'dbusername', 'dbpassword') or die( mysql_error() );
mysql_select_db('dbname');
$results = mysql_query('SELECT artist AS shout FROM albums WHERE artist LIKE "'. mysql_real_escape_string($_REQUEST['term']) .'%" UNION SELECT name FROM albums WHERE name LIKE "'. mysql_real_escape_string($_REQUEST['term']) .'%" UNION SELECT label FROM albums WHERE label LIKE "'. mysql_real_escape_string($_REQUEST['term']) .'%" UNION SELECT track_name FROM tracks WHERE track_name LIKE "'. mysql_real_escape_string($_REQUEST['term']) .'%" ORDER BY 1 LIMIT 10', $connect);
$data = array();
if ( $results && mysql_num_rows($results) )
{
while( $row = mysql_fetch_array($results, MYSQL_ASSOC) )
{
$data[] = array(
'label' => $row['shout'],
'value' => $row['shout']
);
}
}
echo json_encode($data);
flush();
?>
2) 新しいスクリプトdbhost
でdbusername
、、、dbpassword
&dbname
を、データベースへの接続に使用する実際の詳細に置き換えます。このファイルにこの情報を保存していないことをお勧めしますが。接続情報を別のファイルに保存し、それを webroot の外側に配置して、代わりにここに「含める」方がはるかに優れています。
3) クエリを独自のものに置き換えます。これが私のセットアップ方法であり、交換する必要があるものを確認できます..
最初に検索文字列の名前をshout
(わかりやすくするために) に変更し、次にartist
テーブル内の列を検索してから、オートコンプリートによって生成された検索albums
に一致させます。artist
term
この形式は、次の検索を繰り返します...
name
からalbums
label
からalbums
track_name
からtracks
この情報を検索する列とテーブルに置き換え、ファイルを保存してアップロードするだけです。
pathtoyoursearchenginescript.php
4)検索エンジンを指すページに次の検索フォームを追加します。
<form action="pathtoyoursearchenginescript.php" method="post">
Search: <input type="text" id="suggest" /> <input type="submit" value="Search" />
</form>
5) 必要な .js ライブラリが既にページにロードされていると仮定すると、このコードのチャンクをどこかに放り込むだけで完了です!
<script type="text/javascript">
jQuery(document).ready(function($){
$('#suggest').autocomplete({source:'search.php', minLength:2});
});</script>
注: 上記のコードsearch.php
は、webroot にあることを前提としています。そうでない場合は、ファイルの正しい場所でこれを更新してください。
これが誰かに役立つことを願っています;)