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
的表格,该表格包含了id
、name
和grades
三个列。其中,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分的学生记录,即Mary
和Rose
。
当然,如果我们希望根据成绩范围来搜索学生记录,则可以使用类似如下的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等更为安全和有效的数据类型。