我有一张桌子:
left | right
--------------
123 | test
12345 | test2
1234 | test3
需要在左列中找到最匹配的条目并从右列输出条目。
示例:我想为 12345678 找到最匹配的条目(它是 12345 | test2)并在输出中获取 test2。我试过定位,但不知道如何输出右列。
我有一张桌子:
left | right
--------------
123 | test
12345 | test2
1234 | test3
需要在左列中找到最匹配的条目并从右列输出条目。
示例:我想为 12345678 找到最匹配的条目(它是 12345 | test2)并在输出中获取 test2。我试过定位,但不知道如何输出右列。
'Mosty Mostacho' 给出的答案很好,它提到你需要找到 Levenshtein 距离。这是另一种方法,只需获取输入字符串等所有术语,然后按LEFT
列按降序排列结果
SELECT
`right`
FROM
mytable
WHERE
'12345678' LIKE CONCAT(`left`,'%')
ORDER BY
`left` DESC
LIMIT
1
你必须澄清什么most matching entry
意思。我了解您的意思是计算所有元素的Levenshtein 距离并获得其中最少的元素。
因此,首先您必须创建一个用户定义函数来计算距离。检查此链接。
一旦你设置了 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%' )
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 $$