您能在MySQL查詢中拆分/爆炸一個字段嗎?我要寫一份關于一些學生完成情況的報告。每個學生都屬于一個客戶。以下是表格(簡化為這個問題)。CREATE TABLE `clients` (
`clientId` int(10) unsigned NOT NULL auto_increment,
`clientName` varchar(100) NOT NULL default '',
`courseNames` varchar(255) NOT NULL default '')這個courseNames字段包含以逗號分隔的課程名稱字符串,如“ab 01、ab 02、ab 03”。CREATE TABLE `clientenrols` (
`clientEnrolId` int(10) unsigned NOT NULL auto_increment,
`studentId` int(10) unsigned NOT NULL default '0',
`courseId` tinyint(3) unsigned NOT NULL default '0')這個courseId字段在這里Clients.CourseNames字段中課程名稱的索引..所以,如果客戶courseNames是“ab01,ab02,ab03”,以及courseId報名人數是2,然后學生在AB 03。是否有一種方法可以對這些表進行一個包含課程名稱的選擇?請記住,會有來自不同客戶的學生(因此有不同的課程名稱,并不是所有的課程名稱都是順序的,例如:“NW 01,NW 03”)基本上,如果我可以拆分該字段并從結果數組中返回一個元素,這就是我所要尋找的。我的意思是用神奇的偽碼:SELECT e.`studentId`, SPLIT(",", c.`courseNames`)[e.`courseId`]FROM ...
3 回答

眼眸繁星
TA貢獻1873條經驗 獲得超9個贊
在一個字段中使用逗號分隔的值時,使用查找表不會導致比那些難看的字符串操作更多的代碼。 查找表允許本地數字格式,因此不大于那些CSV字段。不過,它要小一些。 在高級語言代碼(SQL和PHP)中,所涉及的字符串操作很小,但與使用整數數組相比代價很高。 數據庫并不是人類所能閱讀的,因為它們的可讀性/直接可編輯性,所以試圖堅持它們的結構是愚蠢的,就像我所做的那樣。

慕尼黑8549860
TA貢獻1818條經驗 獲得超11個贊
column
table
CREATE TEMPORARY TABLE temp (val CHAR(255));SET @S1 = CONCAT("INSERT INTO temp (val) VALUES ('",REPLACE((SELECT GROUP_CONCAT( DISTINCT `column`) AS data FROM `table`), ",", "'),('"),"');");PREPARE stmt1 FROM @s1;EXECUTE stmt1;SELECT DISTINCT(val) FROM temp;
INSERT
添加回答
舉報
0/150
提交
取消