在上下文中提取搜索字符串

时间:2011-06-03 00:20:47

标签: mysql search

我正在尝试进行MySQL查询,我在上下文中提取搜索字符串。因此,如果搜索是“mysql”,我想从“正文”栏中返回类似的内容

“下载 MySQL 安装程序只需几分钟即可使用”

这就是我现在所拥有的,但它不起作用,因为它只是从身体字段中抓取前20个字符。虽然我希望在搜索词的前后抓取20个字符,以便用户可以在上下文中查看该术语的含义:

SELECT id, title, substring(body, 0, 20)  FROM content WHERE body LIKE '%mysql%' OR title LIKE '%mysql%';

由于

2 个答案:

答案 0 :(得分:2)

以下是您需要的SQL:

SELECT
    id,
    title,
    substring(body,  
        case
             when locate('mysql', lower(body)) <= 20 then 1
             else locate('mysql', lower(body)) - 20
        end,
        case
            when locate('mysql', lower(body)) + 20 > length(body) then length(body)
            else locate('mysql', lower(body)) + 20
        end)
FROM content
WHERE lower(body) LIKE '%mysql%'
    OR title LIKE '%mysql%'
limit 8;

仅供参考:经过测试和工作。

答案 1 :(得分:1)

您可以将整个身体值拉出来,只需在代码中提取字符串即可。如果你正在使用php,你可以做这样的事情,因为你已经查询了body字符串并将其存储在var $body

$index = strpos($body, $searchStr);
$context = substr($body, $index-20, strlen($searchStr)+40);