我有5个用户具有“ shop_access”列(这是商店ID的列表,例如:1,2,3,4)
我正在尝试从数据库中获取所有在shop_access中具有商店ID(例如2)的用户
Current Query:
SELECT * FROM users WHERE '2' IN (shop_access)
但是,它只会返回以数字2开头的具有shop_access的用户。
例如
运行IN子句时,唯一返回的是用户2和用户4。
用户1被忽略(因为它在列表中没有数字2 ,所以不应该这样),因为它不是以数字2 开头的。
我目前无法返回并更改其设置方式,例如,将其转换为JSON并首先使用PHP进行处理,因此,如果有人可以尝试使其工作而不必更改列数据(shop_access ),那将是理想的。
便携式解决方案是使用like
:
where concat(',', shop, ',') like '%,2,%'
或者,如果要搜索的值作为参数给出:
where concat(',', shop, ',') like concat('%,', ?, ',%')
根据您的数据库,可能会有更整洁的选项。在MuSQL中:
where find_in_set('2', shop)
也就是说,我强烈建议您修复数据模型。在数据库中存储CSV数据在许多方面都破坏了关系数据库的目的。您应该有一个单独的表来存储用户/商店关系,每个元组在单独的行中。推荐阅读:在数据库列中存储分隔列表真的那么糟糕吗?。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句