首頁  >  問答  >  主體

find_in_set - 请教 mysql查询

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

ringa_leeringa_lee2743 天前742

全部回覆(8)我來回復

  • 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解析、查詢功能。

    回覆
    0
  • 巴扎黑

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

    透過like或正規即可。
    但不建議將邏輯放在mysql中,造成資料庫引擎壓力過大,而且極度不安全。
    正確的做法應該是把整個欄位的值取出來,當作字串然後用語言例如php python nodejs之類的處理。

    回覆
    0
  • PHP中文网

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

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

    正如@小蟲哥哥所說,這是設計缺陷,這看起來是一個一對多或者多對多的關係,不應該用一個字段存起來,不僅查詢效率低(在SQL裡對字段進行運算有可能會使該欄位的索引無法被使用),而且查詢起來也不靈活。

    回覆
    0
  • 阿神

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

    like 匹配

    回覆
    0
  • PHP中文网

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

    喜歡:539

    回覆
    0
  • PHP中文网

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

    我說這是設計缺陷有人認同嗎

    回覆
    0
  • PHP中文网

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

    like相似匹配

    回覆
    0
  • PHPz

    PHPz2017-04-17 14:59:45

    模糊
    查詢
    研究下

    回覆
    0
  • 取消回覆