我有一个MySQL表用户,需要检查其中的哪些条目包含 classes 字段中的给定值,这是我目前以逗号分隔列表的形式他们所属的所有课程。
我最好的想法是让用户,将他们的类字段分成一个数组并循环查看是否存在匹配,但特别是当用户列表变得更大时非常低效。
所以我想知道是否有更好的方法在包含逗号分隔值的列表中找到匹配,或者是否有更好的方法来存储这些类(类的数量不是'固定)。
答案 0 :(得分:0)
如果您使用的是MySQL,则可以使用FIND_IN_SET()
功能。
FIND_IN_SET(STR,strlist)
如果字符串str在,则返回1到N范围内的值 字符串列表strlist由N个子串组成。字符串列表是 由“,”字符分隔的子串组成的字符串。如果 第一个参数是一个常量字符串,第二个参数是一个类型的列 SET,FIND_IN_SET()函数被优化为使用位运算。 如果str不在strlist中,或者strlist是空字符串,则返回0。 如果任一参数为NULL,则返回NULL。此功能不起作用 如果第一个参数包含逗号(“,”)字符,则正确。
所以你可以做一个像
这样的查询SELECT * FROM users WHERE FIND_IN_SET('class to search', class_list);