2017-06-13 34 views
0

我在我的數據庫中有一個字段'actors',它是一個或多個文本項的逗號分隔列表。但不是固定不變的。它可以是任何數量從1項到10MySQL不止一次返回子串中的最後一項

我使用MYSQL下面的代碼的單場打入單獨的列

SELECT 
substring_index (substring_index (`actors`,',',1), ',', -1) AS `Name of Actor 1`, 
substring_index (substring_index (`actors`,',',2), ',', -1) AS `Name of Actor 2`, 

.... all the way down to ... 

substring_index (substring_index (`actors`,',',10), ',', -1) AS `Name of Actor 10` 

,這從分開的偉大工程一件事..當列表用完時,最後一個項目只是一遍又一遍地重複

在3個演員的列表中,我需要演員4 - 10的名稱爲NULL,實際發生的是演員4 - 10充滿演員3(最後一項)

如何擴展(如果可能le)在SQL語句上停止返回最後一個項目,當它已經被使用。

+0

[SQL拆分值,以多行(HTTPS的可能重複:所以輸出爲空,如果沒有足夠的項目不提供ELSE的CASE // stackoverflow.com/questions/17942508/sql-split-values-to-multiple-rows) –

+1

這是拆分成列,而不是行... –

+0

表是從舊項目繼承,正在進行更新作爲重新設計在進行中爲在今年晚些時候 – MOLEDesign

回答

1

嘗試計算字符串中逗號的數量,如果有足夠的逗號,則有條目可以做你的子串。如果有一個逗號(即,如果有多個逗號),則至少有兩個條目。

CASE WHEN LENGTH(`actors`) - LENGTH(REPLACE(`actors`, ',', '')) > 0 THEN 
    substring_index (substring_index (`actors`,',',2), ',', -1) END AS `Name of Actor 2`, 
CASE WHEN LENGTH(`actors`) - LENGTH(REPLACE(`actors`, ',', '')) > 1 THEN 
    substring_index (substring_index (`actors`,',',3), ',', -1) END AS `Name of Actor 3`, 

等等

+0

絕對美麗。完美的作品。謝謝! – MOLEDesign

相關問題