dポイントプレゼントキャンペーン実施中!

検索機能を作成しています。

データベースに”絵コンテ”というデータが登録されており、”絵コンテ”でマッチングを行えば問題なく一致しますが、”コンテ”でマッチングをしようと思えば一致がないと言ってきます。

DBはMySQLで、言語はPHPを使用しています。
DBにはそこそこの件数がありますので、DBのデータをできれば加工したくありません。

どういう原因が考えられますでしょうか?また解決策はどういったものになりますでしょうか?
ぜひよろしくお願い致します。

A 回答 (3件)

No.2です。


ゴメンなさい。
LIKE '%コンテ'
でした。
    • good
    • 0
この回答へのお礼

MySQL4.0以下では日本語はバイナリ列と同程度の扱いだったようで、以下で解決しました。ありがとうございました。

1)SELECT a FROM b LIKE BINARY 'ABC';

2)SELECT a FROM b WHERE target LIKE '%~%'
ではなくて、
SELECT a FROM b WHERE target REGEXP '~'

お礼日時:2010/03/10 14:30

SQL言語はある程度仕様が決められているため、部分一致は共通で「%」です。


"%コンテ"で検索すればいいでしょう。

参考URL:http://www.yc.tcu.ac.jp/~yamada/doc/mysql/win/06 …
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
WHERE フィールド名 LIKE "'%{$str}%" と変数は{}で囲う必要があるようですね。

単純にaddslashesの動作に問題がありそうだなと、今頃気になってきました。。。

お礼日時:2010/03/01 14:36

今現在、どういうSQL文を発行しているのか位書きましょうよ…。

この回答への補足

汚いソースで申し訳ありません。

$keyword = split(' ', $keywords); //キーワードを配列に入れる

$sql_column = array('title','contents','more','excerpt');
$sql_result = 'count(distinct no) AS s_num';
$sql_table = 'blog_article';
$sql_cond = ' AND blog_no = ' . $blog_no;

if($keywords){
$sql = "select $sql_result from $sql_table";
$where = '';
foreach ($keyword as $item) {
if (trim($item) == '') { continue; }
if ($where == '') {
$where = ' where(';
} else {
$where .= 'and';
}
$where .= '(';
foreach ($sql_column as $column) {
$where .= "($column like '%" . addslashes(trim($item)) . '%\')';
$where .= 'or';
}
$where = substr($where, 0, strlen($where)-2);
$where .= ')';
}
if ($where != '') { $where .= ') '; }
$sql .= $where;
$sql .= $sql_cond;

$result_c = mysql_query ($sql);
$data_c = mysql_fetch_array ($result_c);
$search_num = $data_c["s_num"];
} else {
$search_num = 0;
}

絵という文字の文字コードに\が含まれていて、前後文字の文字コードが変になる等の
文字コードの問題かと推測していました。
書き込むと、アルゴリズムが悪さをしているようにも感じてきました。。。

補足日時:2010/03/01 14:30
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!