人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

【再質問】phpとMySQLの検索システムについて質問です。

「this is a pen」「pentax」というレコードがあり、
「pen」というキーワードで検索した時、

select * from レコード REGEXP 'pen';

単語が完全一致している「this is a pen」の方から
ソートする方法を教えていただけますでしょうか。
(日本語も含まれることがありますが、対象でなくても構いません)

その際、「this is a pen」「pentax」のどちらも検索対象のままにしておきたいです。
また「this is a pen」のところは「pen,note」といったカンマ区切りのケースもあります。

環境は以下の通りです。
php 5.2.17
MySQL 5.0.51a

それではよろしくお願い致します。

●質問者: shohei1979
●カテゴリ:コンピュータ ウェブ制作
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● a-kuma3
●1000ポイント ベストアンサー

完全一致は pen を単語境界で挟む条件とし、それ以外は単語境界で挟むのを not で絡めて完全一致を含まない条件にして、それらを union で結合、というのではどうでしょうか?

select * from RECORD where CONTEXT REGEXP '[[:<:]]pen[[:>:]]'
union
select * from RECORD where CONTEXT REGEXP 'pen' and not CONTEXT REGEXP '[[:<:]]pen[[:>:]]';

テーブル名が RECORD、文字列が含まれる列名を CONTEXT としています。

↓は、SQL Fiddle というサイトで試してみたものです。
http://sqlfiddle.com/#!2/9b4e5/11

MySQL の正規表現については、マニュアルの、このページを参照しました。
http://dev.mysql.com/doc/refman/5.1/ja/regexp.html


shohei1979さんのコメント
ありがとうございます!! この方法でうまくいきました!!
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ