从 mySQL 中提取前 X 个单词(不仅仅是字符)

2022-08-31 00:47:39

我希望能够从数据库字段中提取前X个单词以用于预览。基本上,如果一个字段的内容是

 "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris malesuada."

我想回声

 "Lorem ipsum dolor sit amet... see more"

最好的方法是什么?

我唯一知道要做的就是在查询中拉动整个字段,然后执行类似操作

$foo = [query_results];
$bar = explode(' ', $foo);
for($x=0, $x<6, $x++){
     echo $bar[$x];
};
echo "... see more"

有没有更好的方法?


答案 1

您肯定希望使用SUBSTRING_INDEX它将返回一些字符数,直到根据分隔符的出现次数达到指定的计数。在您的情况下,调用将如下所示:

 SELECT SUBSTRING_INDEX(text_field, ' ', 6) FROM ...

特别是,这将返回最多六个单词,其中我们将一个单词定义为一组不是由空格分隔的空格的字符。

注意:这将返回附加到最后一个单词的标点符号,这可能是也可能不是必需的。在PHP中替换字符串末尾的任何标点符号字符都很简单,但是如果你想完全留在SQL中,我认为你可以使用TRIM。其语法如下:

SELECT TRIM(TRAILING ',' FROM SUBSTRING_INDEX(text_field, ' ', 6)) FROM ...

可能有更好的选择来删除尾随标点符号 - 但也许这是另一个问题(我仍然在寻找比TRIM更好的解决方案)。


答案 2

好吧,您可以使用子字符串函数在查询中执行此操作

SELECT CONCATENATE(SUBSTRING(myfield, 0, N), "... see more") FROM mytable

这会让你得到前N个字母...

如果你真的想得到前N个单词,并且你把单词定义为“用空格分隔”,你仍然可以在查询中这样做,如下所示

SELECT CONCATENATE(SUBSTRING_INDEX(myfield," ", N), "... see more") FROM mytable

推荐