单元中的MySQL数组

单元中的MySQL数组,mysql,Mysql,我的设想是,我有一个表,存储学校的课程。每个类都是表中的一行。其中一个字段是提供课程的课程期间。有些只提供一个时段,有些提供多个时段,有些提供每个时段 在包含数据的CSV中,类周期数据存储为逗号分隔的值列表,没有空格。例如,代数运行周期1、2、3和4,因此在CSV中,它表示为“1,2,3,4” 我的问题是,当涉及到查询,例如,在第三个期间运行的所有类时,类似于SELECT*FROM`classes`WHERE`period`like'1'将找不到它。添加通配符%字符没有帮助,因为它还会拾取在第1

我的设想是,我有一个表,存储学校的课程。每个类都是表中的一行。其中一个字段是提供课程的课程期间。有些只提供一个时段,有些提供多个时段,有些提供每个时段

在包含数据的CSV中,类周期数据存储为逗号分隔的值列表,没有空格。例如,代数运行周期1、2、3和4,因此在CSV中,它表示为“1,2,3,4”

我的问题是,当涉及到查询,例如,在第三个期间运行的所有类时,类似于
SELECT*FROM`classes`WHERE`period`like'1'
将找不到它。添加通配符
%
字符没有帮助,因为它还会拾取在第11个周期运行的类

如何在单元格中存储这些多个值并查询它们


编辑:这是我提供的所有数据。有200多个类,因此将所有数据重新格式化到另一个表中并使用
JOIN
(这是正确的方法)将非常耗时。我正在寻找一种方法,以我已有的格式处理数据。

最好在类和期间之间创建一个关系表。

create table class_period(
  class_id int,
  period int
)
然后可以查询句点为1的类

select * from classes c join class_period p on c.id = p.class_id where p.period = 1

最好在类和时段之间创建一个关系表。

create table class_period(
  class_id int,
  period int
)
然后可以查询句点为1的类

select * from classes c join class_period p on c.id = p.class_id where p.period = 1

如果您坚持用实际的数据库结构来实现这一点,有一些奇特的方法。这里有一个

将数据存储为列周期中的例如“|1 | 3 | 4 | 11 |”。现在您有了要搜索的唯一字符串。(“|1 |”!=“|11 |”)

范例

SELECT * FROM `classes` WHERE `period` LIKE '%|1|%'; 

如果您使用一个小程序,就可以轻松地导出“还提及”参考表。“加入”的建议,确实是最好的方式

如果您坚持用实际的db结构来实现这一点,有一些奇特的方法。这里有一个

将数据存储为列周期中的例如“|1 | 3 | 4 | 11 |”。现在您有了要搜索的唯一字符串。(“|1 |”!=“|11 |”)

范例

SELECT * FROM `classes` WHERE `period` LIKE '%|1|%'; 

如果您使用一个小程序,就可以轻松地导出“还提及”参考表。“加入”的建议,确实是最好的方式

您应该将时段数据与类id一起存储在一个单独的表中,然后将这些表连接在一起以获取数据。尝试在单个字段中存储多个值通常是一个坏主意。您应该阅读我完全知道这不是最好的方法。我只是想处理我已经得到的数据。有大量的类,所以完成和重做这些都会非常耗时。因此,为什么我要问,是否有一种方法可以处理我已有的数据。如果有一种方法可以将这些数据转换成正确的格式,而不必手动全部键入,我完全赞成。这是值得的,因为您应该将周期数据与类id一起存储在一个单独的表中,然后将这些表连接在一起以获取数据。尝试在单个字段中存储多个值通常是一个坏主意。您应该阅读我完全知道这不是最好的方法。我只是想处理我已经得到的数据。有大量的类,所以完成和重做这些都会非常耗时。因此,为什么我要问,是否有一种方法可以处理我已有的数据。如果有一种方法可以将这些数据转换成正确的格式,而不必全部手工输入,我完全赞成。这是值得的,请参阅我之前的评论,但尽管是的,我同意这是更好的方法,我问的是如何处理我已经提供的数据,而不是手动将所有200多个类重新放入一个新的数据库中。好吧,在不改变已经存储的数据的情况下,如果mysql是版本8,我想你可以使用
regexp\u like
进行精确匹配,如果版本小于8,也可以使用mysql的
substring
函数。请参阅我前面的评论,但我同意这是更好的方法,我想问的是如何处理我已经提供的数据,而不是手动将所有200多个类重新放入新数据库。好吧,在不更改已存储数据的情况下,如果mysql是版本8,我认为您可以使用
regexp\u like
进行精确匹配,如果版本小于8,则可以使用mysql的
substring
函数。