2017-05-02 40 views
-2

让说我有一个表是这样的:如何使用SQL在查询语句中查找最长匹配?

---------------------------------- 
|id |phrase 
---------------------------------- 
|1 |real 
|2 |testing 
|3 |real message 
|4 |testing message 
|5 |special testing message 

的目标是找到最长匹配的ID在一个查询语句。例如,询问句子This is a testing message应返回4

我在PHP中使用MySQL,所以如果单独在SQL中执行起来太复杂,部分操作可以切换到PHP。目前我正在将整个表格全部取出,并在PHP上逐一执行正则表达式,但如果表格变大,效率会很低。有没有办法将一些工作负载切换到SQL,以便我不需要将整个表存储到内存中?

+0

尝试LEN()函数。 [链接](https://www.w3schools.com/sqL/sql_func_len.asp) –

+0

@JoãoPaulodeLimaLEN()如何解决此问题? – cytsunny

+0

对不起cytsunny。其实我只是想要得到最长的短语。但现在我发现它需要符合你的说法。 –

回答

1

使用CONCATLENGTHLIMIT

SELECT id FROM table 
WHERE ('.$search_term.' LIKE CONCAT("%",phrase,"%")) 
ORDER BY LENGTH(phrase) DESC LIMIT 1