我知道我可以使用IN(1,2,3)从SQL数据库中选择值为1,2或3的项目,但是如果我在MYSQL中有一个字符串值,那该怎么办?等于'1,2,3',我想选择该值。据我所知,我必须这样做:
SELECT whatever FROM wherever WHERE sqlvariable = '1' OR sqlvariable LIKE '1,%' OR `sqlvariable` LIKE '%,1,%' OR `sqlvariable` LIKE '%,1'
如果我想反过来模拟'IN'那么这很好。但是让我说我想选择sql变量,它包含1或2,然后我必须这样做:
SELECT whatever FROM wherever WHERE sqlvariable = '1' OR sqlvariable LIKE '1,%' OR `sqlvariable` LIKE '%,1,%' OR `sqlvariable` LIKE '%,1' OR sqlvariable = '2' OR sqlvariable LIKE '2,%' OR `sqlvariable` LIKE '%,2,%' OR `sqlvariable` LIKE '%,2'
现在假设我使用PHP生成上述查询,我希望找到包含1 2 4 66 34 33 22 44或992的sql变量。这个查询运行需要很长时间
我可以做一个按位实现,但后来我只限制了大约60个不同的项目,这是不够的。
有没有更快的方法在sql中使用如上所述的CSV查询?我想它有点像IN()但反过来。
答案 0 :(得分:4)
您可以使用FIND_IN_SET
简化查询:
SELECT whatever
FROM wherever
WHERE FIND_IN_SET('1', sqlvariable)
OR FIND_IN_SET('2', sqlvariable)
然而,这仍然需要搜索表格中的每一行。最好重新设计数据库,以便不需要CSV格式的数据。
更新:您现有的设计看起来像这样:
groupname groupmembers
Group1 1,2,3
Group2 3,4
您应该将其更改为更像这样的内容:
groupid groupmember
1 1
1 2
1 3
2 3
2 4