查询以选择最匹配的条目

时间:2013-08-15 06:25:39

标签: mysql

我有一张桌子:

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

需要在左栏中找到最匹配的条目,并从右栏输出条目。

示例:我想找到最匹配的条目12345678(它是12345 | test2)并在输出中获取test2。我试过定位,但不知道如何输出右栏。

4 个答案:

答案 0 :(得分:1)

'Mosty Mostacho'给出的答案很好,提到你需要找到Levenshtein距离。这是另一种方法,只需获取输入字符串等所有字词,然后按LEFT列降序排序结果

SELECT 
  `right` 
FROM 
  mytable 
WHERE 
  '12345678' LIKE CONCAT(`left`,'%') 
ORDER BY 
  `left` DESC 
LIMIT 
  1

SQLFIDDLE

答案 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