人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

MySQLでの検索に関する質問です。例えば単語一つだけで検索する場合は

SELECT * FROM mytable WHERE mycolumn LIKE '%検索語句%';

のようにセレクト文を書けばいいと思うのですが、よくGoogleでやるように検索語句を二つ以上、スペースを空けて入力した場合には、どのようなセレクト文を書けばいいのでしょうか。よろしくお願いします。

●質問者: mine-D
●カテゴリ:ウェブ制作
✍キーワード:Google MySQL SELECT セレクト 入力
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● y-kawaz
●35ポイント

プログラム側でキーワードをパース(解析)して、複数条件にするだけです。そういうSQL文の書き方があるわけではありません。

例えば「検索語句1 検索語句2 検索語句3」という文字列があったら空白文字で分割して複数のLIKE文をANDでつなげて以下のようなSQL文を作って検索するイメージです。

SELECT * FROM mytable
WHERE mycolumn LIKE '%検索語句1%'
 AND mycolumn LIKE '%検索語句2%'
 AND mycolumn LIKE '%検索語句3%'

Googleのように大量データを全文検索するケースでは実際はこんなに単純な検索はしていないでしょうが、小規模なデータベースならこれで十分かと思います。

◎質問者からの返答

なるほどなるほど。ANDで複数条件を指定するだけなんですね。ありがとうございます。


2 ● bayan
●40ポイント ベストアンサー

1) 入力値を個々の検索語句に分割する (SQLではなくプログラミング言語側で行う)

2) それぞれの検索語句についての LIKE 句を AND や OR で連結したSQLを書く

ってな感じですかね。

全てを含む行を抽出したい場合

SELECT * FROM mytable WHERE mycolumn LIKE '%検索語句A%' AND mycolumn LIKE '%検索語句B%';

いずれかを含む行を抽出したい場合

SELECT * FROM mytable WHERE mycolumn LIKE '%検索語句A%' OR mycolumn LIKE '%検索語句B%';

PHPで書いてみました。

(MySQLとかよく知らんで適当に書いてますので、つっこみください)

<?php
$input = "餅 飽きた カレー";

// 全角空白を半角空白にそろえるなら
// http://www.php.net/manual/ja/function.mb-convert-kana.php
// $input = mb_convert_kana($input,"s");

// 連続する空白文字で分割
// http://www.php.net/manual/ja/function.preg-split.php
$keywords = preg_split("/[\s]+/",$input);

// LIKE を作成して配列に格納する
// クオートやエスケープもする
$tmp = array();
foreach($keywords as $kw){
 if($kw == ""){
 // 空っぽなら無視
 }else{
 $tmp[] = " mycolumn LIKE '%".mysql_real_escape_string($kw)."%' ";
 }
}

$sql = "SELECT * FROM mytable "; 
if(count($tmp) > 0){
 // AND なり OR で連結してWHERE を作成
 $sql .= "WHERE " . implode("AND",$tmp);
}
echo $sql;
?>
◎質問者からの返答

おおお。ありがとうございます。非常に分かりやすいです。言語もちょうどPHPで書いていますので、大助かりです。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ