我有一张桌子:
left | right
--------------
123 | test
12345 | test2
1234 | test3
需要在左栏中找到最匹配的条目,并从右栏输出条目。
示例:我想找到最匹配的条目12345678(它是12345 | test2)并在输出中获取test2。我试过定位,但不知道如何输出右栏。
答案 0 :(得分:1)
'Mosty Mostacho'给出的答案很好,提到你需要找到Levenshtein距离。这是另一种方法,只需获取输入字符串等所有字词,然后按LEFT
列降序排序结果
SELECT
`right`
FROM
mytable
WHERE
'12345678' LIKE CONCAT(`left`,'%')
ORDER BY
`left` DESC
LIMIT
1
答案 1 :(得分:0)
尝试这样的事情: -
SELECT Coulmn2
FROM Table
WHERE MATCH ( Coumn1)
AGAINST ( '%$keywords%' )
答案 2 :(得分: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 $$
答案 3 :(得分:0)
您必须澄清most matching entry
的含义。我理解你的意思是为所有元素计算Levenshtein distance并获得最少的元素。
因此,首先您必须创建用户定义函数来计算距离。请检查此link。
设置完UDF后,您应运行的查询是:
select `right` from t
order by levenshtein('your_word', `left1`)
limit 1