您能在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
提交
取消