例如,我将其作为列中的一个字段:
3,21,23,41,47,56,57,61,64,74,78,79,82,83,86,90,94
这些是 ID,我试图弄清楚如何搜索我尝试过的多个号码,例如:
SELECT * FROM table WHERE status='A' AND (FIND_IN_SET('3,64', myids))
这似乎只有在 3 和 64 在一起并且为每个值输出 find_in_set 可能有点痛苦时才有效。
有更好的解决方案或建议吗?
例如,我将其作为列中的一个字段:
3,21,23,41,47,56,57,61,64,74,78,79,82,83,86,90,94
这些是 ID,我试图弄清楚如何搜索我尝试过的多个号码,例如:
SELECT * FROM table WHERE status='A' AND (FIND_IN_SET('3,64', myids))
这似乎只有在 3 和 64 在一起并且为每个值输出 find_in_set 可能有点痛苦时才有效。
有更好的解决方案或建议吗?
FIND_IN_SET()
只找到第一个参数的位置(参见MySQL 参考,字符串函数)。
FIND_IN_SET
您可以为要查找的每个 id使用一个:
SELECT * FROM table WHERE status='A' AND
FIND_IN_SET('3', myids) AND FIND_IN_SET('64', myids)
尝试这个
SELECT * FROM table WHERE myids REGEXP REPLACE("3,64", ',', '(\\,|$)|');
SELECT * FROM table WHERE status='A' AND myids in (3, 64)
你可以试试这个。
因此,如果我们必须以精确的逗号分隔寻找双方,我们必须这样做。
# Example:
# A: myids = 1,2,20,3,30
# B: myfind = 2,3
# This WHERE Print: 2 and 3
SELECT * FROM table WHERE CONCAT(',', myids, ',') REGEXP CONCAT(',(', REPLACE('2,3', ',', '|'), ',)');
不使用的无效函数列表:
- SELECT * FROM table WHERE status='A' AND myids in (3, 64)
- SELECT * FROM table WHERE myids REGEXP REPLACE("3,64", ',', '(\,|$)|');
不使用的原因之一是它寻找与 30或 300 相同的 3 与 2 或 20 200 等相同
foreach($ids as $id)
{
SELECT * FROM table WHERE status='A' AND (FIND_IN_SET($id, myids))
}
that check one by one and getting the result from table.