为了账号安全,请及时绑定邮箱和手机立即绑定

您能在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 关注
  • 859 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信