我正在尝试进行MySQL查询,我在上下文中提取搜索字符串。因此,如果搜索是“mysql”,我想从“正文”栏中返回类似的内容
“下载 MySQL 安装程序只需几分钟即可使用”
这就是我现在所拥有的,但它不起作用,因为它只是从身体字段中抓取前20个字符。虽然我希望在搜索词的前后抓取20个字符,以便用户可以在上下文中查看该术语的含义:
SELECT id, title, substring(body, 0, 20) FROM content WHERE body LIKE '%mysql%' OR title LIKE '%mysql%';
由于
答案 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);