我希望能够从数据库字段中提取前X个单词以用于预览.基本上如果一个领域的内容是
"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris malesuada."
Run Code Online (Sandbox Code Playgroud)
我想回应一下
"Lorem ipsum dolor sit amet... see more"
Run Code Online (Sandbox Code Playgroud)
最好的方法是什么?
我知道要做的唯一事情是在查询中拉出整个字段然后执行类似的操作
$foo = [query_results];
$bar = explode(' ', $foo);
for($x=0, $x<6, $x++){
echo $bar[$x];
};
echo "... see more"
Run Code Online (Sandbox Code Playgroud)
有更好的方法吗?
Mar*_*iot 17
您肯定希望使用SUBSTRING_INDEX,它将返回一些字符数,直到根据分隔符的出现实现指定的计数.在您的情况下,调用将如下所示:
SELECT SUBSTRING_INDEX(text_field, ' ', 6) FROM ...
Run Code Online (Sandbox Code Playgroud)
特别是,这将返回最多六个单词,其中我们将单词定义为不是由空格分隔的空格的一组字符.
注意:这将返回附加到最后一个单词的标点符号,这可能是也可能不是.在PHP中替换字符串尾部的任何标点符号都很简单,但是如果你想完全保留在SQL中,我认为你可以使用TRIM.其语法如下:
SELECT TRIM(TRAILING ',' FROM SUBSTRING_INDEX(text_field, ' ', 6)) FROM ...
Run Code Online (Sandbox Code Playgroud)
可能有一个更好的选择来删除尾随标点符号 - 但也许这是另一个问题(我仍然在寻找比TRIM更好的解决方案).
那么你可以使用substring函数在你的查询中做到这一点
SELECT CONCATENATE(SUBSTRING(myfield, 0, N), "... see more") FROM mytable
Run Code Online (Sandbox Code Playgroud)
那会给你前N个字母......
如果你真的想得到前N个单词并且你将单词定义为"由空格分隔",你仍然可以在查询中执行如下操作
SELECT CONCATENATE(SUBSTRING_INDEX(myfield," ", N), "... see more") FROM mytable
Run Code Online (Sandbox Code Playgroud)