2013-02-10 217 views
0

我需要從db中選擇一些主題..我使用下面的代碼來選擇昏迷分隔的主題列表。使用MYSQL將字符串長度限制爲最小字符

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

其確定。它爲我工作。它的輸出是這樣的。

數學,生理學,商務&會計學,天主教

現在我需要這個字符串限制爲35個字符,並需要添加「...」在字符串的結尾。

這是這樣的。

Mathematics, Physiology, Business... 

所以,我可以知道是否有可能與MySQL一起時,選擇查詢?

謝謝。

回答

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當獲得字符,因爲長度...

+0

我的真實查詢是非常複雜的一個我..它已創建更多的表數據... – TNK 2013-02-10 15:27:35

+0

等待,加入這裏http://chat.stackoverflow.com/rooms/24271/tharanga-nuwan – 2013-02-10 15:32:28

+0

檢查此。 .. http://stackoverflow.com/questions/14824791/how-do-i-modify-this-select-query-in-mysql – TNK 2013-02-12 03:39:01

0

只是串/使用框架時,Concat的到GROUP_CONCAT

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

的結果結束通常它會更容易不過,要做到這一點的應用程序。

1

您可以使用CASE表達式來檢查subjectsLENGTH()。如果超過35個字元那麼你可以申請SUBSTRING()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 &... | 
+0

謝謝..但在我的真正的查詢中使用它的問題。 – TNK 2013-02-10 15:26:09

+0

@TharangaNuwan有什麼問題? – Taryn 2013-02-10 15:27:25

+0

@bluefeet我在使用我的真實查詢時遇到了問題。 – TNK 2013-02-10 15:32:48

0

存儲你的結果在一個變量和一個if語句檢查是否超過32個字符。如果是這樣,選擇它的前32個字符並連接'...'。