开发者社区> 问答> 正文

您可以拆分/分解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字段包含课程名称的逗号分隔字符串,例如“ AB01,AB02,AB03”

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此处的字段是client.courseNames字段中课程名称的索引。因此,如果客户的名称courseNames是“ AB01,AB02,AB03”,而courseId注册的名称是2,则该学生在AB03中。

有什么办法可以对这些包含课程名称的表格进行单选吗?请记住,会有来自不同客户的学生(因此具有不同的课程名称,并非所有课程名称都是连续的,例如:“ NW01,NW03”)

基本上,如果我可以拆分该字段并从结果数组中返回单个元素,那将是我想要的。这就是神奇的伪代码的意思:

SELECT e.studentId, SPLIT(",", c.courseNames)[e.courseId] FROM ...

展开
收起
保持可爱mmm 2020-05-10 18:41:55 495 0
1 条回答
写回答
取消 提交回答
  • 到目前为止,我想将那些逗号分隔的列表保留在我的SQL数据库中-充分了解所有警告!

    我一直认为它们比查找表有优势(查找表为标准化数据库提供了一种方法)。经过几天的拒绝,我看到了曙光:

    当在一个字段中使用逗号分隔的值时,使用查找表不会比丑陋的字符串操作引起更多的代码。 查找表允许使用本机数字格式,因此不能大于这些csv字段。虽然是更小。 所涉及的字符串操作在高级语言代码(SQL和PHP)中比较薄,但是与使用整数数组相比,开销很大。 数据库并不是人类可读的,并且像我所做的那样,试图坚持使用结构通常是愚蠢的,因为它们具有可读性/直接可编辑性。 简而言之,MySQL中没有本机SPLIT()函数是有原因的。来源:stack overflow

    2020-05-10 18:42:11
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
搭建电商项目架构连接MySQL 立即下载
搭建4层电商项目架构,实战连接MySQL 立即下载
PolarDB MySQL引擎重磅功能及产品能力盛大发布 立即下载

相关镜像