1

タグ (単語) を含むテーブルがあります。テーブルに新しいアイテム (単語) を追加するたびに、入力している単語に最も似ている単語を最初に確認したいので、その単語に似ている単語が既にテーブルにあることに気付くことができます。 .

Mysql で match() 関数を使用するようなものですが、対応する単語数のスコアは必要ありません。しかし、単語内のスコア、対応する文字の数。

次のようなものです: select * from tags order by look_a_like_score(@newword)

しかし、 look_a_like_score() のような関数はありますか?

例、私はすでにテーブルに持っています:

レストラン

エレベーター

スイミングプール

Wi-Fi

今私は追加したい:

無料の水泳施設

私が今欲しいのは、「swimm」の部分が最も一致するので、「スイミング プール」を一番上にしたリストです。

これを行うのを手伝ってもらえますか?

PS。テーブル全体を PHP に収集してから、それらを配列に入れます。したがって、PHP によるアプローチも歓迎されます。

4

3 に答える 3

0

機能はありません。ただし、SQL を使用してこれを行うことができます。numbers@newtag に新しいタグが含まれており、テーブルがあると仮定しましょう。次のようなことができます。

select t.tag, max(len) as biggestmatch
from (select concat('%', substr(@newtag, n1.n, n2.n), '%') as pat,
             n1.n as start, n2.n as len
      from numbers n1 cross join
           numbers n2
      where n1.n <= length(@newtag) and n1+n2 <= length(@newtag)
     ) patterns join
     tags t
     on t.tag like patterns.pat
group by t.tag
order by max(len)
limit 1  /* you only need this if you want the best one */

これが特にうまく機能することを約束するものではありません。しかし、長すぎない一握りのタグと文字列の場合は、目的に合うかもしれません。

于 2013-05-27T13:42:56.453 に答える