【问题标题】:MySQL SELECT WHERE 'a' IN (`field`)MySQL SELECT WHERE 'a' IN (`field`)
【发布时间】:2011-04-13 15:30:29
【问题描述】:

我知道拥有这样的 MySQL 表结构不是一种合适的技术,但我必须使用这样的技术。问题是,表中的字段具有逗号分隔整数的值,例如“1,3,5,7,10”,我希望查询返回行,其中field 具有查询传递的数字比如:

SELECT * FROM `table` WHERE '5' IN (`field_in_table`)

但是,如果在这种情况下,“5”不是该字段中的第一个数字,则它不起作用。 有什么建议,如何解决?

提前致谢, 问候, 乔纳斯

【问题讨论】:

    标签: mysql select where


    【解决方案1】:

    您可以改用WHERE field_in_table LIKE '%5%'。 当然,问题是,'1,59,98' 也会返回。

    【讨论】:

    • 这行不通,因为它会返回 50 或 5 :S
    • 如果您只寻找 '5' 而不是 '25' 或 '51',最好使用 '%,5,%'。
    【解决方案2】:
    SELECT * FROM table WHERE field_in_table LIKE '%5'");
    

    应该工作

    【讨论】:

      【解决方案3】:

      你可以试试

      SELECT *
          FROM table
          WHERE '%,5,%' LIKE field_in_table OR
                '%,5'   LIKE field_in_table OR
                '5,%'   LIKE field_in_table;
      

      更好的方法可能是使用正则表达式,我不是权威。

      【讨论】:

        【解决方案4】:

        看看

        FIND_IN_SET

        返回一个 1 到 N 范围内的值 如果字符串 str 在字符串中 列表 strlist 由 N 组成 子串。字符串列表是一个字符串 由分隔的子字符串组成 “,“ 人物。如果第一个参数 是一个常量字符串,第二个是 SET 类型的列,即 FIND_IN_SET() 函数被优化为 使用位算术。如果 str 则返回 0 不在 strlist 中,或者如果 strlist 是 空字符串。

        【讨论】:

        • 谢谢 - 这是我正在寻找的功能。我只是忘记了这个命令:)
        【解决方案5】:
        SELECT * 
        FROM table 
        WHERE FIELD LIKE '%,5,%' OR 
              FIELD LIKE '5,%' OR 
              FIELD LIKE '%,5'
        

        【讨论】:

          猜你喜欢
          • 2011-09-02
          • 2011-04-06
          • 2013-05-27
          • 2010-11-03
          • 1970-01-01
          • 2011-01-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多