mysql从序列化数组中搜索类别

mysql从序列化数组中搜索类别,mysql,Mysql,我有一个表“用户\类别” 'users_category' : id, prefix, name 和表“用户” 'users' : categories, etc... 其中users.categories是用户\u category.id id的数组 用户可以是任何类别的一部分,如果我将它们所属的类别数组存储为序列化数组,如何运行查询以检查它们是否属于“category x” 例: 我无法运行“LIKE”命令,因为users.categories已序列化。是他们在序列化数据中进行搜索的任何

我有一个表“用户\类别”

'users_category' : id, prefix, name
和表“用户”

'users' : categories, etc...
其中users.categories是用户\u category.id id的数组

用户可以是任何类别的一部分,如果我将它们所属的类别数组存储为序列化数组,如何运行查询以检查它们是否属于“category x”

例:


我无法运行“LIKE”命令,因为users.categories已序列化。是他们在序列化数据中进行搜索的任何方式。此外,我知道上述查询可能有错误,即使规范化表结构是一种更好的前进方式,但如果此时采用该路线不是最佳的,那么您可以尝试以下查询:

SELECT u.*, uc.* 
FROM users u, users_category uc
WHERE uc.name='X' AND FIND_IN_SET(uc.id, u.categories)
它使用mysql函数


工作演示可在以下位置获得:

我的建议是不要在MySQL数据库中存储序列化数组。查找称为“规范化”的内容:-您需要3个表中的2个。正如@RocketHazmat所说的,用户表中不应该有类别数组。您所称的“用户类别”应该称为“类别”,然后您应该有一个“用户类别”,其中包含用户id、类别id。
SELECT u.*, uc.* 
FROM users u, users_category uc
WHERE uc.name='X' AND FIND_IN_SET(uc.id, u.categories)