【再質問】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

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

回答の条件
  • 1人5回まで
  • 登録:2012/05/02 10:23:20
  • 終了:2012/05/02 14:22:53

ベストアンサー

id:a-kuma3 No.1

a-kuma3回答回数4470ベストアンサー獲得回数18442012/05/02 12:37:49

ポイント1000pt

完全一致は 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

id:shohei1979

ありがとうございます!!
この方法でうまくいきました!!

2012/05/02 14:21:59
  • id:taknt
    そもそもどのようにソートするのかってのが意味不明ですね。

    たとえば

    pen
    a pen
    pen a
    peni as
    apen
    bpens
    this is a pen.
    pen-pen

    とかあったら どうソートされるのか?とか。
  • id:shohei1979
    コメントありがとうございます。

    説明不足ですみません。
    単語が一致するものからソートされていれば、
    その中での優先順位は気にしていませんでした。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません