0

データベースから 3 つのコメントをランダムに取得する関数を作成しました。唯一の問題は、150 語のコメントがあり、その隣の 2 つのコメントが 1 文または約 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 語を超えるコメントを切り捨て...、切り捨ての後に a を追加します。

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

または、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 に答える
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 に答える