0

我做了一个函数,从我的数据库中随机提取 3 条评论。唯一的问题是有时我有一个 150 个单词的评论,而它旁边的 2 个有一个句子或大约 50 个单词。

是否可以只显示最多 70 个字的评论?

  function getIndexComments(){
    $query  = "SELECT * FROM tbl_comments ORDER BY RAND() LIMIT 0,3";
                    $result = mysql_query($query);

    while($row = mysql_fetch_array($result)){
        echo "<li><span>".$row['company']."</span>".
        "\"".$row['comments']."\"" .
        "</li>";
    }   
}
4

7 回答 7

3

此解决方案将截断超过 70 个单词的评论,并...在截断后添加一个。

SELECT company, CONCAT(SUBSTRING_INDEX(comments, ' ', 70), '...') AS comments
FROM tbl_comments
ORDER BY RAND()
LIMIT 3

但是,如果您真的想从结果集中过滤掉超过 70 个单词的评论,您可以使用:

SELECT *
FROM tbl_comments
WHERE ((LENGTH(comments) - LENGTH(REPLACE(comments, ' ', ''))) + 1) <= 70
ORDER BY RAND()
LIMIT 3

^ 这本质上是计算comments字段中的空格数并将该计数加 1 => 给我们字数...然后我们检查该计数是否超过 70,如果是,则将其过滤掉。

于 2012-07-17T09:23:20.687 回答
0

一个解决方案可能是使用 REGEXP '.{0, 70}' 或类似的东西:)

于 2012-07-17T09:20:46.123 回答
0

如果您将单词定义为由空格分隔的字符串,则类似于以下内容会起作用:

SELECT x FROM y WHERE SUM( LENGTH(x) - LENGTH(REPLACE(x, ' ', ''))+1) < 70

您可以通过添加逗号、句点等来扩展它。

于 2012-07-17T09:21:42.310 回答
0

以下是将评论截断为 70 个字符的长度,而不会截断单词。

SELECT
  LEFT(str, cutpos) AS str1
FROM (
  SELECT
    comments AS str,
    70 - IFNULL(NULLIF(LOCATE(' ', REVERSE(LEFT(comments , 70))), 0) - 1, 0) AS cutpos
   FROM tbl_comments
) s
于 2012-07-17T09:27:10.437 回答
0

您可以让 CSS 使用

text-overflow:ellipsis;

这将添加点和容器的固定宽度/高度,您可以根据需要渲染

于 2012-07-17T09:23:40.687 回答
0

为什么要因为评论太长而删除评论?我建议你做一个限制显示评论长度的输出。...意思是,如果太长,请添加到评论中。

将它们全部放在 div 中并将其添加到样式中:

overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
width: 200px;

希望有帮助。

于 2012-07-17T09:23:43.870 回答
0

或者,您可以使用 PHP 的substr()函数截断它。

我认为(未经测试)这样的事情应该这样做:

function getIndexComments(){
    $query  = "SELECT * FROM tbl_comments ORDER BY RAND() LIMIT 0,3";
    $result = mysql_query($query);

    while($row = mysql_fetch_array($result)) {
        $comments = preg_replace('/\s+?(\S+)?$/', '', substr($row['comments'], 0, 70) . '...';

        echo '<li><span>' . $row['company'] . '</span>"' . $comments . '"</li>';
    }   
}

这会将 $row['comments'] 截断为 70 个单词并附加一个“...”。

于 2012-07-17T09:31:00.593 回答