【问题标题】:The max comma separated string allowed in my sql IN() Function or FIND_IN_SET Functionmysql IN() 函数或 FIND_IN_SET 函数中允许的最大逗号分隔字符串
【发布时间】:2018-07-11 14:09:36
【问题描述】:

我一直在做一个项目,我必须在数据库表中找到手机号码。用户应该上传一个可以访问数千个手机号码的手机号码列表。所以我主要关心的是,逗号分隔的手机号码字符串将允许在我的 sql 的 FIND_IN_SET() 函数中使用多长时间。

实际上我不想存储这些数字,我只想找到上传列表中的任何数字是否存在于表中。所以我的查询将是这样的:

SELECT * FROM table WHERE mobile IN('uploaded comma saperated string of numbers')

SELECT * FROM table WHERE FIND_IN_SET (mobile,'uploaded comma saperated string of numbers')

【问题讨论】:

  • FIND_IN_SET 可以。但是,如果您有数千个手机号码,则不应将它们以逗号分隔。
  • 最好使用临时表并使用主表检查

标签: php mysql mysqli


【解决方案1】:

我想说这里的解决方法是根本不使用FIND_IN_SET,而是使用这样的东西:

WHERE number IN (num1, num2, ..., numN)

换句话说,通过根据用户输入列表搜索每条记录的电话号码来表达您的查询。 IN 子句中可以出现的术语数量仅受max_allowed_packet 的限制,在正常情况下您可能不会超过此数量。

【讨论】:

  • 最多只允许 1000 个
  • @Gaj 你有这方面的文档参考吗?对于 OP 来说,这可能不是问题。
  • 在 mysql 中它基于 max_allowed_pocket dev.mysql.com/doc/refman/8.0/en/… 在 Oracle 中它的 1000
  • @Gaj 这个问题显然是用 MySQL 标记的。为什么要将 Oracle 带入讨论?
【解决方案2】:

我建议不要以逗号分隔插入手机号码,而是将它们作为单个手机号码插入单行。如果你这样做了,那么搜索和删除操作就很容易了。

只需上传以逗号分隔的手机号码列表,然后使用insert_bacth()函数插入即可。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多