「MySQLであいまい検索パターンマッチの仕方(Like句の使い)初級編」の編集履歴(バックアップ)一覧はこちら

MySQLであいまい検索パターンマッチの仕方(Like句の使い)初級編」(2015/09/26 (土) 10:57:27) の最新版変更点

追加された行は緑色になります。

削除された行は赤色になります。

データベースの特定のカラムに挿入されたフィールドデータのあいまい検索について考えていきます。9月25日記事 ~ ~ 目次 #contents ~ ~ ---- ~ *テーブル構造 テーブル構造は以下のものと仮定します。 mysql> desc information; +-----------+--------------+------+-----+------------+----------------+ | Field | Type | Null | Key | Default | Extra | +-----------+--------------+------+-----+------------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | info_date | date | NO | MUL | 0000-00-00 | | | title | varchar(255) | NO | | NULL | | | comment | text | NO | | NULL | | | url | varchar(255) | NO | | NULL | | +-----------+--------------+------+-----+------------+----------------+ ~ ~ *同一の語句を検索する方法 **SQL文 SELECT * FROM information WHERE comment = 'キーワード'; **PDOのクエリ PDOの場合は以下です。 $keyword = $_POST["keyword"]; SELECT * FROM information WHERE comment = :keyword; この方法であると、commentにキーワードという文字が全文一致でなければ検索できません。 ~ ~ *あいまいな語句を検索する方法 **SQL文 あいまい検索の場合LIKE句を使い、%で語句を挟みます。「%をいれると任意の0文字以上の文字列」、「_を入れると任意の1文字以上の文字列」が検索対象になります。 SELECT * FROM information WHERE comment LIKE '%キーワード%'; ~ ~ **PDOのクエリ PDOで処理する際には先に変数に%ではさんだものを入れておき、それを挿入していきます。 $keyword = $_POST["keyword"]; $keyword = '%'.$keyword.'%';// %ではさむところがポイント SELECT * FROM information WHERE comment LIKE :keyword; ~ ~ *コード **検索ページ <!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> <title>検索ページ</title> </head> <body> <form action="result.php" method="post"> <label for="search">検索</label> <input type="search" name="keyword"> <input type="submit" name="submit" value="検索"> </form> </body> </html> ~ ~ **結果ページ ※configファイルの状況については[[phpのconfigファイル]]をご参照ください。 <?php require ('config.php'); $dsn = 'mysql:dbname='.DB_NAME.';host='.DB_HOST.';port='.DB_PORT.''; $user = DB_USER; $password = DB_PASSWORD; $keyword = $_POST["keyword"]; try{ $dbh = new PDO($dsn, $user, $password); }catch(PDOException $e){ print 'Connection failed:'.$e->getMessage(); die(); } ?> <!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> <title><?php echo htmlspecialchars($_POST["keyword"],ENT_QUOTES,'UTF-8')."の検索結果";?></title> </head> <body> <?php $keyword = '%'.$keyword.'%';// %ではさむところがポイント $stmt = $dbh->prepare("SELECT * FROM information WHERE title LIKE :keyword"); //二つのカラムを同時に検索したい場合は以下 //$stmt = $dbh->prepare("SELECT * FROM information WHERE title LIKE :keyword OR comment LIKE :keyword"); $stmt->bindParam( ':keyword' ,$keyword, PDO::PARAM_STR); $stmt->execute(); while($result = $stmt->fetch(PDO::FETCH_ASSOC)){ print '<p>'.htmlspecialchars($result['title'],ENT_QUOTES,'UTF-8').'</p>'; print '<p>'.htmlspecialchars($result['comment'],ENT_QUOTES,'UTF-8').'<br></p>'; } ?> </body> </html> ~ ~ *まとめ まずは簡単な検索の仕組みについて考えていきました。しかし、この方法はスペースを開けたりする検索はできません。 その場合は全文検索などの処理が必要になってきます。それは後日記述していきます。 ~ ~ 以上
データベースの特定のカラムに挿入されたフィールドデータのあいまい検索について考えていきます。9月25日記事 ~ ~ 目次 #contents ~ ~ ---- ~ *テーブル構造 テーブル構造は以下のものと仮定します。 mysql> desc information; +-----------+--------------+------+-----+------------+----------------+ | Field | Type | Null | Key | Default | Extra | +-----------+--------------+------+-----+------------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | info_date | date | NO | MUL | 0000-00-00 | | | title | varchar(255) | NO | | NULL | | | comment | text | NO | | NULL | | | url | varchar(255) | NO | | NULL | | +-----------+--------------+------+-----+------------+----------------+ ~ ~ *同一の語句を検索する方法 **SQL文 SELECT * FROM information WHERE comment = 'キーワード'; **PDOのクエリ PDOの場合は以下です。 $keyword = $_POST["keyword"]; SELECT * FROM information WHERE comment = :keyword; この方法であると、commentにキーワードという文字が全文一致でなければ検索できません。 ~ ~ *あいまいな語句を検索する方法 **SQL文 あいまい検索の場合LIKE句を使い、%で語句を挟みます。「%をいれると任意の0文字以上の文字列」、「_を入れると任意の1文字以上の文字列」が検索対象になります。 SELECT * FROM information WHERE comment LIKE '%キーワード%'; ~ ~ **PDOのクエリ PDOで処理する際には先に変数に%ではさんだものを入れておき、それを挿入していきます。 $keyword = $_POST["keyword"]; $keyword = '%'.$keyword.'%';// %ではさむところがポイント SELECT * FROM information WHERE comment LIKE :keyword; ~ ~ *コード **検索ページ <!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> <title>検索ページ</title> </head> <body> <form action="result.php" method="post"> <label for="search">検索</label> <input type="search" name="keyword"> <input type="submit" name="submit" value="検索"> </form> </body> </html> ~ ~ **結果ページ ※configファイルの状況については[[phpのconfigファイル]]をご参照ください。 <?php require ('config.php'); $dsn = 'mysql:dbname='.DB_NAME.';host='.DB_HOST.';port='.DB_PORT.''; $user = DB_USER; $password = DB_PASSWORD; $keyword = $_POST["keyword"]; try{ $dbh = new PDO($dsn, $user, $password); }catch(PDOException $e){ print 'Connection failed:'.$e->getMessage(); die(); } ?> <!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> <title><?php echo htmlspecialchars($_POST["keyword"],ENT_QUOTES,'UTF-8')."の検索結果";?></title> </head> <body> <?php $keyword = '%'.$keyword.'%';// %ではさむところがポイント $stmt = $dbh->prepare("SELECT * FROM information WHERE title LIKE :keyword"); //二つのカラムを同時に検索したい場合は以下 //$stmt = $dbh->prepare("SELECT * FROM information WHERE title LIKE :keyword OR comment LIKE :keyword"); $stmt->bindParam( ':keyword' ,$keyword, PDO::PARAM_STR); $stmt->execute(); while($result = $stmt->fetch(PDO::FETCH_ASSOC)){ print '<p>'.htmlspecialchars($result['title'],ENT_QUOTES,'UTF-8').'</p>'; print '<p>'.htmlspecialchars($result['comment'],ENT_QUOTES,'UTF-8').'<br></p>'; } ?> </body> </html> ~ ~ *まとめ まずは簡単な検索の仕組みについて考えていきました。しかし、この方法はスペースを開けたりする検索はできません。 その場合は全文検索などの処理が必要になってきます。[[MySQLで全文検索FULLTEXTインデックス編1]]で記述していきたいと思います。 ~ ~ 以上

表示オプション

横に並べて表示:
変化行の前後のみ表示: