Heim  >  Fragen und Antworten  >  Hauptteil

find_in_set - 请教 mysql查询

mysql 表中字段option_tag 存储的值格式(分号)为: 4:539;8:543;4:545;8:549
通过 find_in_set() 可以查找到以逗号分隔的字符串。
以分号分隔的 字符串 有什么函数直接能查询到 option 含有 539的所有值?

ringa_leeringa_lee2743 Tage vor728

Antworte allen(8)Ich werde antworten

  • PHP中文网

    PHP中文网2017-04-17 14:59:45

    sql语句:
    SELECT * FROM table
    WHERE locate(':539;', CONCAT(options_tag, ';')) > 0

    用like的方法逻辑上不严谨,如4:2539这种情况也会被like匹配,但不是想要的结果。

    从设计方案考虑,如果是复杂的数据类型,建议存成json格式,mysql高版本直接内置了json解析、查询功能。

    Antwort
    0
  • 巴扎黑

    巴扎黑2017-04-17 14:59:45

    通过like或者正则即可。
    但是不建议将逻辑放在mysql中,造成数据库引擎压力过大,而且极度不安全。
    正确的做法应该是把整个字段的值取出来,作为字符串然后用语言比如php python nodejs之类的处理。

    Antwort
    0
  • PHP中文网

    PHP中文网2017-04-17 14:59:45

    SELECT * FROM table
    WHERE options_tag LIKE '%539%';

    正如@小虫哥哥 所说,这是设计缺陷,这看起来是一个一对多或者多对多的关系,不应该用一个字段存起来,不仅查询效率低(在SQL里对字段进行运算有可能会使该字段的索引无法被使用),而且查询起来也不灵活。

    Antwort
    0
  • 阿神

    阿神2017-04-17 14:59:45

    like 匹配

    Antwort
    0
  • PHP中文网

    PHP中文网2017-04-17 14:59:45

    like :539

    Antwort
    0
  • PHP中文网

    PHP中文网2017-04-17 14:59:45

    我说这是设计缺陷有人赞同吗

    Antwort
    0
  • PHP中文网

    PHP中文网2017-04-17 14:59:45

    like相似匹配

    Antwort
    0
  • PHPz

    PHPz2017-04-17 14:59:45

    模糊
    查询
    研究下

    Antwort
    0
  • StornierenAntwort