1

例如,我将其作为列中的一个字段:

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 可能有点痛苦时才有效。

有更好的解决方案或建议吗?

4

5 回答 5

2

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)
于 2012-06-02T09:27:05.413 回答
2

尝试这个

SELECT * FROM table WHERE myids REGEXP REPLACE("3,64", ',', '(\\,|$)|');
于 2016-10-04T09:44:12.250 回答
1
SELECT * FROM table WHERE status='A' AND myids in (3, 64)

你可以试试这个。

于 2012-07-14T14:25:14.197 回答
0

因此,如果我们必须以精确的逗号分隔寻找双方,我们必须这样做。

# 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 等相同

于 2021-08-21T18:17:44.940 回答
-2
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.
于 2014-08-23T07:56:49.867 回答