SQLite中有一个很棒的snippet()函数(FTS4 / 5查询),该函数返回搜索匹配后的单词数,其中一部分包含查询(如果匹配)。您可以突出显示搜索词,最重要的是,您不会获得整篇文章,而只会得到带有匹配项的部分(子字符串)。 有相当于MySQL的MySQL吗?
我完全是MySql的新手,但这是我现在编写的代码: 列字符串是 “ Lorem ipsum dolot坐满了苍蝇,奉献了上乘的风度,eiusmod苍蝇的临时禁令包括劳动者和劳动者。”
查询字符串为“ fly”。
(我不知道jet,如何将搜索查询传递/操作到SQL函数,在这种情况下为“ fly”?)是的,我知道SQL注入,这只是一个简单的例子。
<?
$db = new PDO(...);
//
$sql = "DROP TABLE IF EXISTS test;
CREATE TABLE test(tekst TEXT) CHARACTER SET utf8 COLLATE utf8_unicode_520_ci;
CREATE FULLTEXT INDEX idx ON test(tekst);
INSERT INTO test(tekst) VALUES('Lorem ipsum dolot sit amet fly, consectetur adipiscing elit, sed do eiusmod fly tempor incididunt ut labore et dolore magna aliqua.');
";
//
$db->exec($sql);
//
$db->query("SET @off = 16; #char offset
SET @co = 'fly' COLLATE utf8_unicode_520_ci; #the search word
SET @lewa = '' COLLATE utf8_unicode_520_ci; #left string from the match
SET @prawa = '' COLLATE utf8_unicode_520_ci; #right string from the match
");
//
$sql = "SELECT
@lewa := LEFT(tekst,LOCATE(@co,tekst)-@off),
@prawa := SUBSTRING(tekst,LOCATE(@co,tekst)+@off),
REPLACE(
TRIM(TRAILING @prawa
FROM
TRIM(LEADING @lewa FROM tekst))
,@co,CONCAT('<b>',@co,'</b>')
) trimmed
FROM test WHERE MATCH(tekst) AGAINST(CONCAT(@co,'*') IN BOOLEAN MODE)";
//
$odp = $db->query($sql)->fetch();
//
echo $odp["trimmed"];
?>
返回:“一定要坐飞,安全” 但这仅适用于查询中的一个单词。