0

私はテーブルを持っています:

left  | right
--------------
123   | test
12345 | test2
1234  | test3

左の列で最も一致するエントリを見つけ、右の列からエントリを出力する必要があります。

例: 12345678 に最も一致するエントリ (12345 | test2) を見つけて、出力に test2 を取得します。見つけようとしましたが、右の列を出力する方法がわかりません。

4

4 に答える 4

0
DELIMITER $$  
    CREATE PROCEDURE FIND(IN @yourtext varchar(100))

       BEGIN
          DECLARE a INT Default 0 ;
          myloop: LOOP

             IF EXISTS (SELECT * FROM your_table 
             WHERE LeftColumn LIKE '%'+substr(@yourtext,0,length(LeftColumn)-a)+'%')
             SELECT RightColumn FROM your_table 
             WHERE LeftColumn LIKE '%'+substr(@yourtext,0,length(LeftColumn)-a)+'%'
             LEAVE myloop;
             END IF

             SET a=a-1;
             select a;
             IF a=0 THEN
                LEAVE myloop;
             END IF;
       END LOOP myloop;
    END $$
于 2013-08-15T06:43:48.067 に答える
0

意味を明確にする必要がありますmost matching entry。すべての要素のレーベンシュタイン距離を計算し、最小のものを取得することを意味していることを理解しています。

そのため、最初に距離を計算するユーザー定義関数を作成する必要があります。このリンクを確認してください。

UDF をセットアップしたら、次のクエリを実行する必要があります。

select `right` from t
order by levenshtein('your_word', `left1`)
limit 1
于 2013-08-15T07:05:28.103 に答える
0

Try something like this:-

SELECT Coulmn2
FROM Table
WHERE  MATCH ( Coumn1)
AGAINST (  '%$keywords%' )
于 2013-08-15T06:30:33.210 に答える