私はテーブルを持っています:
left | right
--------------
123 | test
12345 | test2
1234 | test3
左の列で最も一致するエントリを見つけ、右の列からエントリを出力する必要があります。
例: 12345678 に最も一致するエントリ (12345 | test2) を見つけて、出力に test2 を取得します。見つけようとしましたが、右の列を出力する方法がわかりません。
私はテーブルを持っています:
left | right
--------------
123 | test
12345 | test2
1234 | test3
左の列で最も一致するエントリを見つけ、右の列からエントリを出力する必要があります。
例: 12345678 に最も一致するエントリ (12345 | test2) を見つけて、出力に test2 を取得します。見つけようとしましたが、右の列を出力する方法がわかりません。
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 $$
意味を明確にする必要がありますmost matching entry
。すべての要素のレーベンシュタイン距離を計算し、最小のものを取得することを意味していることを理解しています。
そのため、最初に距離を計算するユーザー定義関数を作成する必要があります。このリンクを確認してください。
UDF をセットアップしたら、次のクエリを実行する必要があります。
select `right` from t
order by levenshtein('your_word', `left1`)
limit 1
Try something like this:-
SELECT Coulmn2
FROM Table
WHERE MATCH ( Coumn1)
AGAINST ( '%$keywords%' )