亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

您能在MySQL查詢中拆分/爆炸一個字段嗎?

您能在MySQL查詢中拆分/爆炸一個字段嗎?

Cats萌萌 2019-06-21 15:56:54
您能在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個贊

直到現在,我還想在我的SQLdb中保留那些逗號分隔的列表-很好地知道所有的警告!

我一直認為它們比查找表(它提供了一種規范化數據庫的方法)有好處。經過幾天的拒絕,我見過光:

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

簡而言之,MySQL中沒有本機splp()函數是有原因的。


查看完整回答
反對 回復 2019-06-21
?
慕尼黑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;

請記住在數據庫中存儲CSV


per@mark amery-因為這會將昏迷分離值轉換為INSERT語句時,在未清除的數據上運行時要小心。


請重申一下將CSV存儲在DB中;此函數的目的是將CSV轉換為合理的DB結構,而不是在代碼中的任何地方使用。如果您必須在生產中使用它,請重新考慮您的DB結構。


查看完整回答
反對 回復 2019-06-21
  • 3 回答
  • 0 關注
  • 886 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號