[Tep-j-general] 検索時にSQLの文字バケ

Back to archive index

Emmy Matsuo emmy****@sheha*****
2005年 11月 14日 (月) 11:52:24 JST


はじめまして。松尾と申します。
いつも参考にさせていただいております。

osCommerce 2.2ms1j をホスティングで運営しようとしています。

環境は
PHP 4.1.2
MySQL 3.23.58 です。


詳細検索時に、検索したキーワードが含まれている商品は全部ヒットするのですが、
それ以外にもキーワードが含まれていない商品が多数ヒットしてしまうので、
この部分を改善したいと思っています。


SQLのログをとってみたところ、例えば「ねこ」で検索してみると以下のように
なっていました。(適当に改行します)


select count(*) as total  from products p left join manufacturers m using
(manufacturers_id), products_description pd left join specials s on
p.products_id = s.products_id, categories c, products_to_categories p2c
where p.products_status = '1' and p.products_id = pd.products_id and
pd.language_id = '4' and p.products_id = p2c.products_id and
p2c.categories_id = c.categories_id and ((pd.products_name like
'%ろこ%' or p.products_model like '%ろこ%' or m.manufacturers_name
like '%ろこ%' or pd.products_description like '%ろこ%') )


他のlikeを含むselect文も同様に「ねこ」が「ろこ」になっています。
また、「草」→「瘰」、カタカナの場合も「サッカー」→「サャカー」に
なっていました。ただ、文字化けしない場合もあります(「ウサギ」とか)。


検索に関するプログラムは、メーリングリストを見て、空白区切りでAND検索
をするために /catalogue/includes/functions/general.php に以下の2行を
足したくらいで、他はカスタマイズしていません。

>  $search_str = mb_convert_kana($search_str, "sKV");
>  $search_str = ereg_replace('[[:space:]]+', ' and ', trim($search_str));


過去ログを見ましたが、同じような問題が見つけられなかったため
質問させていただきました。
どなたかヒントをいただければ有り難いです。よろしくお願いします。

------------------------------ 
松尾 恵実
emmy****@sheha*****




Tep-j-general メーリングリストの案内
Back to archive index