lang
1//会社名がname 2//日本語入力考慮し、全角スペースを半角にする 3 $search = mb_ereg_replace(" ", " ", $_POST['name']); 4 //$keywords = preg_split("/[ ]+/u",$_POST['name']);//これと↓どちらでもよい 5 $keywords = preg_split('/[\s]+/', $search, -1, PREG_SPLIT_NO_EMPTY); 6 var_dump($keywords); 7 global $index ; 8 $index = 0; 9 $name = $_POST['name']; 10 $add_param = "name"; 11 $add_like = " LIKE "; 12 foreach( $keywords as $word ){ 13 //最初だったらwhereをつける 14 if($index == 0){ 15 $where = " where ".$add_param.$add_like."'%{$word}%' "; 16 } else{ 17 $where .= " and ".$add_param.$add_like." '%{$word}%'"; 18 } 19 $index++; 20 } 21 //******************************氏名を複合検索:******************************** 22 23 $mail = $_POST['mail']; 24 if ($index > 0){ 25 if(!empty($mail)){ 26 27 $where .= " AND lower(mail) LIKE '%$mail%'"; 28 } 29 } else { 30 $where .= " where lower(mail) LIKE '%$mail%'"; 31 } 32 var_dump($where); 33 34 35 $pgsql = "select * from shain $where"; 36 37 38 var_dump($pgsql);
2点あります。
まず、
上記のコードでとりあえず
会社名であいまいかつ AND検索をしたいのですが
うまく検索できません。
var_dumpしたsql文を
pgadminで検証すると
正しく検索されます。
何が原因でしょうか?
2点目ですが、
たとえば
A株式会社 北海道支店
A株式会社 関東支店
B株式会社 北海道支店
B株式会社 関東支店
というデータがあったとき、
関東という単一キーワードを入れると
B株式会社 関東支店
とでてしまい正しく検索策されません。
こちらもpgadminで行うと正しく検索できます。
2点ともsqlは正しいがPHPのほうに問題があるということでしょうか?
よろしくお願いいたします。
追記
豊田三菱日立株式会社というデータで
豊田 日立と検索すると
正しくできます。
しかし、
A株式会社 関東支店
のように会社名とその後の単語の間にスペースがあると
正しく検索されません
追記
文字列間の空白を削除して検索をかけるようにすれば良いみたいなので
select * from shain where replace(name,' ','') LIKE '%A%' and replace(name,' ','') LIKE '%関東%'としてもだめでした
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。