Mar 11, 2006

MySQLでのLIKEとREGEXPの挙動

MySQLの保存文字エンコードがEUCで、PHPスクリプトがEUCである。
これで検索スクリプトを作っていて、パターンマッチング演算子「LIKE」を使っていたのだが、どうも変な感じでヒットする。たとえば魚へんの「鱒」で「鱗造」がヒットしてしまうのだ。これが長い文字列なら問題ないので、まあいいかと思っていて、ふと正規表現によるパターンマッチング演算子「REGEXP」を使ったらまったく問題なく検索されることがわかった。
つまり、
$sql .= " WHERE (bbs_msg LIKE '%".cnv_sqlstr($key)."%')";
ではなくて、
$sql .= " WHERE (bbs_msg REGEXP '".cnv_sqlstr($key)."')";
を使えば問題ない。
内部エンコードがutf-8でスクリプトがutf-8なら「LIKE」でも問題がないかもしれないと想像する。ウチのMySQLはEUCでインストールしているので試せない。

Mar 02, 2006

MySQLのデータベースからデータを抽出する

PHPなどとMySQLの連携だと、MySQLの文法の学習も必要になる。
またにわか勉強(^^)。
下の記事で作ったデータベースとテーブルから、投稿記事の多い順に書き手の方々を抽出する。それも100件以上書かれた方(自分含む^^)を。
書き手でグループ化して、その書き手の書いた数を「as」で名前をつけて、それで並べる。
mysql> select count(bbs_auth) as cnt,bbs_auth from gs_book group by bbs_auth having count(bbs_auth)>=100 order by cnt desc;
+------+------------------+
| cnt | bbs_auth |
+------+------------------+
| 1449 | 清水鱗造 |
| 1078 | 冨澤守治 |
| 525 | 桐田真輔 |
| 448 | mitsui K&T |
| 414 | A・T |
| 285 | TISATO |
| 238 | 河合民子 |
| 210 | 木村 |
| 196 | 関ofuji |
| 164 | tomizawa |
| 122 | ぺこ (¨*)(*¨) |
| 121 | (*''*)peco! |
| 106 | (*''*)peco! |
+------+------------------+
13 rows in set (0.10 sec)

November 2017
Sun Mon Tue Wed Thu Fri Sat
     
   

Search

Categories
Archives
Syndicate this site (XML)

Powered by
blosxom 2.0
and
modified by
blosxom starter kit

新規投稿