※部分一致検索ができなくて困っています。
※Apache2.0.52 + MySQL 5.0.51a + PHP5.2.8の環境です。
" sprintf "を使った、下記コードで部分一致検索をするには、どのようにしたらい
いのか、どなたかご教授いただけないでしょうか。
--------------------------------------------------------------------------
$u_address = $_REQUEST['u_address'];// POSTで送られてきた値を受け取り変換。
検索fieldは、"u_address"です。
--------------------------------------------------------------------------
$query = sprintf("SELECT * FROM dive_free_tbl_ WHERE u_address = '%s' ORDER BY serial DESC", $u_address);
※上記のコードだと、"完全一致"にて検索となります。(部分一致の検索にしたい)
下記のコードに変更して、見たのですがエラーにでダメでした。(WHERE以下を抜粋)
WHERE u_address = '%s' ORDER BY serial DESC", LIKE'%$u_address%');
WHERE u_address = '%s' ORDER BY serial DESC", LIKE'[%$u_address]%'');
WHERE u_address = '%s' ORDER BY serial DESC", LIKE'{%$u_address}%'');
WHERE u_address '%s' ORDER BY serial DESC", LIKE'%$u_address%');
WHERE u_address '%s' ORDER BY serial DESC", LIKE'[%$u_address]%'');
WHERE u_address '%s' ORDER BY serial DESC", LIKE'{%$u_address}%'');
" sprintf "を使わず、下記のコードでは問題なく部分一致検索ができます。
--------------------------------------------------------------------------
$sql = "SELECT * FROM dive_free_tbl_ WHERE u_address LIKE'%東%'";
--------------------------------------------------------------------------
何方かご教授いただきたく、よろしくお願いします。
以上
すみません。書き方が悪かったです。
>query = sprintf("SELECT * FROM dive_free_tbl_ WHERE u_address = '%s' ORDER BY serial DESC", $u_address);
WHERE句の「=」を「LIKE]に変えてください。
「=」は完全一致、「LIKE」は部分一致の検索をします。
質問者
補足
※ご教授いただいたとおり、" = "を" LIKE "に変更した場合、エラー無く検索できました。
本当にありがとう御座います。
1)" = "を" LIKE "に変更。
2)「 $u_address 」を「"%$u_address%"」に変更。
これで、バッチリでした。本当にありがとう御座います。
今後もお世話になることがあるかと思いますが、よろしくお願いします。
本当にありがとう御座いました。
こんにちわ
>$query = sprintf("SELECT * FROM dive_free_tbl_ WHERE u_address = '%s' ORDER BY serial DESC", $u_address);
↑「WHERE u_address = '%s' 」とWHERE句が「=」になっているからではないかと思われます。
質問者
補足
こんちには、回答を頂きありがとう御座います。
指摘いただいた、「=」を取っていろいろとやってみましたが、
「部分一致検索」は、どうにも実現できませんでした。
実行した内容は、質問の文章にも書きましたが、
WHERE u_address '%s' ORDER BY serial DESC", LIKE'%$u_address%');
WHERE u_address '%s' ORDER BY serial DESC", LIKE'[%$u_address]%'');
WHERE u_address '%s' ORDER BY serial DESC", LIKE'{%$u_address}%'');
を実行してみました。(WHERE以降を抜粋)
エラーが表示されて、部分一致検索はできませんでした。
何か、いい方法がありましたらお願いいたします。
補足
※ご教授いただいたとおり、" = "を" LIKE "に変更した場合、エラー無く検索できました。 本当にありがとう御座います。 1)" = "を" LIKE "に変更。 2)「 $u_address 」を「"%$u_address%"」に変更。 これで、バッチリでした。本当にありがとう御座います。 今後もお世話になることがあるかと思いますが、よろしくお願いします。 本当にありがとう御座いました。