0

データベースからいくつかの件名を選択する必要があります。以下のコードを使用して、コンマ区切りの件名のリストを選択しました。

GROUP_CONCAT( DISTINCT s.subject_name SEPARATOR ', ') AS subjects,

大丈夫です。それは私のために働いています。その出力はこのようなものです。

数学、生理学、ビジネスおよび会計学、カトリック

ここで、この文字列を 35 文字に制限し、文字列の末尾に「...」を追加する必要があります。

こんな感じです。

Mathematics, Physiology, Business...

それで、クエリを選択するときにmysqlと一緒にそれが可能かどうかを知ることができますか?

ありがとうございました。

4

4 に答える 4

1

このようなことを試して、

SELECT  IF(CHAR_LENGTH(subjects) > 35, CONCAT(LEFT(subjects,35), '...'), subjects),
        ...
FROM
(
    SELECT  GROUP_CONCAT( DISTINCT s.subject_name SEPARATOR ', ') AS subjects,
            ...
    FROM    tableName
    GROUP   BY ...
) s

文字の長さを取得するときCHAR_LENGTHよりも使用したいのですが...LENGTH

于 2013-02-10T15:12:46.107 に答える
1

CASEをチェックする式を使用できます。35 文字を超える場合は、適用して、末尾にを付けて新しい値を取得できます。LENGTH()subjectsSUBSTRING()CONCAT()...

select  
   case 
     when length(subjects) > 35
     then concat(substr(subjects, 1, 35), '...')
     else subjects end as subjects
from
(
  select GROUP_CONCAT( DISTINCT subject_name SEPARATOR ', ') AS subjects
  from yourtable
) src

SQL Fiddle with Demoを参照してください。

これは以下を返します:

|                               SUBJECTS |
------------------------------------------
| Mathematics, Physiology, Business &... |
于 2013-02-10T15:14:27.280 に答える
0

group_concat の結果の最後に部分文字列/連結するだけです

concat(substring(group_concat(distinct s.subject_name SEPARATOR ', '), 35), '...') AS subjects,

ただし、通常は、フレームワークを使用するときにアプリケーションでこれを行う方が簡単です。

于 2013-02-10T15:13:51.993 に答える
0

結果を変数に格納し、if 句で、それが 32 文字を超えているかどうかを確認します。その場合、最初の 32 文字を選択し、それに「...」を連結します。

于 2013-02-10T16:19:02.690 に答える