MySQL 如何搜索逗号分隔值的表格

MySQL 如何搜索逗号分隔值的表格

在MySQL中,有时候我们需要在某个表格中搜索某个特定的值,而这个值是存储在该表的某个列中,且该列值是由多个值用逗号分隔而成的。这时候,我们该如何进行搜索呢?本文将为大家介绍在MySQL中搜索逗号分隔值的表格方法。

首先,我们需要在MySQL数据库中新建一个表格,并在表格中插入一些示例数据,代码如下所示:

CREATE TABLE `students` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(32) NOT NULL,
  `grades` varchar(255) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO `students` VALUES (1, 'Tom', '89,93,87');
INSERT INTO `students` VALUES (2, 'Mary', '78,85,91');
INSERT INTO `students` VALUES (3, 'Jack', '67,78,81');
INSERT INTO `students` VALUES (4, 'Rose', '85,92,78');

以上代码中,我们新建了一个名为students的表格,该表格包含了idnamegrades三个列。其中,grades列是我们希望搜索的列,它存储了每个学生的三次考试成绩,而这些成绩之间是用逗号分隔而成的。

接下来,我们尝试在该表格中搜索某个特定的数字成绩。此时,我们可以使用MySQL中的FIND_IN_SET()函数来实现,该函数的语法如下:

FIND_IN_SET(search_str,str_list)

该函数的参数search_str表示要搜索的字符串,而str_list表示要进行搜索的逗号分隔字符串列表。如果找到了,则该函数会返回该字符串在列表中的位置(其中第一个位置为1),如果未找到,则会返回0。

下面是一个示例,我们尝试查找成绩为85分的学生:

SELECT * FROM `students` WHERE FIND_IN_SET('85',`grades`);

上面这条SQL语句会返回所有成绩中包含85分的学生记录,即MaryRose

当然,如果我们希望根据成绩范围来搜索学生记录,则可以使用类似如下的SQL语句:

SELECT * FROM `students` WHERE FIND_IN_SET('85',`grades`) OR FIND_IN_SET('92',`grades`) OR FIND_IN_SET('78',`grades`);

上述代码会返回所有成绩中包含85分、92分或者78分的学生记录。

当然,上述方法虽然可以搜索到满足条件的记录,但是其查询效率相对较低,特别是在记录比较多时,检索速度会明显变慢。因此,如果您的MySQL版本支持JSON数据类型的话,我们建议您使用JSON方法来存储并检索该类数据。这样可以避免使用逗号分隔列表、解析字符串,提高检索效率以及整洁代码等好处。

阅读更多:MySQL 教程

结论

本文简单介绍了在MySQL中搜索逗号分隔值的表格的方法,主要是使用FIND_IN_SET()函数实现,但需要注意的是,这种方法的查询效率较低。如果可能,我们建议使用JSON等更为安全和有效的数据类型。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程