Windows+Apache+PHP+MySQLによるWebアプリケーション
−入門編−

第6章 MySQLによるWebアプリケーションの基礎

6.11 あいまい検索

■LIKE演算子とワイルドカード文字「%」

 WHERE句で、文字列の部分一致条件を使う場合は、LIKE演算子とワイルドカード文字「%」(半角)を使います。ワイルドカード文字「%」は0文字以上の任意の文字列を意味します。

 末尾が「定食」となる商品名を含むいわゆる後方一致検索の場合は、「LIKE '%定食」のようにします'。

WHERE フィールド名 LIKE '%文字列'

 前方一致検索の場合は、「LIKE '山%'」のようにします。

WHERE フィールド名 LIKE '文字列%'

 部分一致検索の場合は、「LIKE '%幸%'」のようにします。

WHERE フィールド名 LIKE '%文字列%'

 文字列に変数「$str」を使う場合は、変数を示す特殊文字「$」を再評価する必要があるので、「'」(シングルクォーテーション)の代わりに「"」(ダブルクォーテーション)で囲みます。変数は「{ }」で囲みます。

WHERE フィールド名 LIKE "'%{$str}%"

 サンプルファイル「like.php」を以下に示します。

「like.php」

<?php
// インクルードファイルの読み込み
include "common_mysql.php";

?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-JP">
<title>like.php</title>
</head>
<body>
<?php

 // データベースサーバへの接続・データベースの選択
 $db = mysql_connect('localhost','webapl','pass1234');
 $db_name = 'db_販売管理';
 mysql_select_db($db_name,$db);

 // 検索対象テーブル
 $tbl_name = "tbl_商品表3";
 show_records($db_name,$tbl_name,$db);
 print "<br>\n";

 // あいまい検索(LIKE演算子)
 // 後方一致検索
 $str_sql = "SELECT * FROM {$tbl_name} "
       . " WHERE 商品名 LIKE '%定食';";

 
// SQL文の実行
 $rs = mysql_query($str_sql,$db);

 // 結果セットの中の全レコード一覧表示
 print "\"{$str_sql}\"<br>\n";
 show_rs($rs,$db);
 print "<br>\n";

 // 前方一致検索
 $str_sql = "SELECT * FROM {$tbl_name} "
       . " WHERE 商品名 LIKE '山%';";


 // SQL文の実行
 $rs = mysql_query($str_sql,$db);

 // 結果セットの中の全レコード一覧表示
 print "\"{$str_sql}\"<br>\n";
 show_rs($rs,$db);
 print "<br>\n";

 // 部分一致検索
 $str = '幸';
 $str_sql = "SELECT * FROM {$tbl_name} "
       . " WHERE 商品名 LIKE '%{$str}%';";

 // SQL文の実行
 $rs = mysql_query($str_sql,$db);

 // 結果セットの中の全レコード一覧表示
 print "\"{$str_sql}\"<br>\n";
 show_rs($rs,$db);
 print "<br>\n";

 // データベースサーバの切断
 mysql_close($db);

?>
</body>
</html>

 結果は、たとえば以下のように表示されます。

■LIKE演算子とワイルドカード文字「_」

 WHERE句で、特定の長さの文字列に一致する条件を指定する場合は、ワイルドカード文字「_」(半角のアンダーバー)を使います。冒頭が「鶴亀」で4文字の商品名を含むレコードを参照する場合は、「LIKE '鶴亀_ _'」とします。(「_ _」は2個連続した半角のアンダーバーの意味です。ここでは分かりやすいように、間に半角スペースを挿入していますが、SQL文では、半角スペースは入れません)。

WHERE フィールド名 LIKE '文字列_ _'

■IN演算子

 WHERE句で、いくつかの特定の値に一致する場合の条件式には、IN演算子を使います。「1000」あるいは「1500」のいずれかに一致する場合という条件式は、「IN(1000,1500)」と記述します。

WHERE フィールド名 IN (候補値1, 候補値2,・・・,候補値n)

■BETWEEN演算子

 下限値から上限値までの間の任意の値に一致する条件式は、BETWEEN演算子を使います。

WHERE フィールド名 BETWEEN 下限値 AND 上限値

 

 以上のサンプルファイル「between.php」を以下に示します。

<?php
// インクルードファイルの読み込み
include "common_mysql.php";

?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-JP">
<title>like.php</title>
</head>
<body>
<?php

 // データベースサーバへの接続・データベースの選択
 $db = mysql_connect('localhost','webapl','pass1234');
 $db_name = 'db_販売管理';
 mysql_select_db($db_name,$db);

 // 検索対象テーブル
 $tbl_name = "tbl_商品表3";
 show_records($db_name,$tbl_name,$db);
 print "<br>\n";

 // あいまい検索(LIKE演算子)
 // 文字列長を指定したい場合
 // (鶴亀の後に任意の2文字を含む4文字の文字列を検索する例)
 $str_sql = "SELECT * FROM {$tbl_name} "
       . " WHERE 商品名 LIKE '鶴亀__';";

 
// SQL文の実行
 $rs1 = mysql_query($str_sql,$db);

 // 結果セットの中の全レコード一覧表示
 print "\"{$str_sql}\"<br>\n";
 show_rs($rs1,$db);
 print "<br>\n";

 // IN演算子
 $str_sql = "SELECT * FROM {$tbl_name} "
       . " WHERE 単価 IN(1000,1500)';";


 // SQL文の実行
 $rs2 = mysql_query($str_sql,$db);

 // 結果セットの中の全レコード一覧表示
 print "\"{$str_sql}\"<br>\n";
 show_rs($rs2,$db);
 print "<br>\n";

 // BETWEEN演算子
 $str_sql = "SELECT * FROM {$tbl_name} "
       . " WHERE単価 BETWEEN 2000 AND 2500;";


 // SQL文の実行
 $rs3 = mysql_query($str_sql,$db);

 // 結果セットの中の全レコード一覧表示
 print "\"{$str_sql}\"<br>\n";
 show_rs($rs3,$db);
 print "<br>\n";

 // 結果セット(結果ID)の開放
 mysql_free_result($rs1);
 mysql_free_result($rs2);
 mysql_free_result($rs3);

 // データベースサーバの切断
 mysql_close($db);

?>
</body>
</html>

 結果は、たとえば以下のように表示されます。


 


前へ | 目次へ |次へ  | YCポータルサイト

執筆 山田豊通
更新日: 2004年12月13日