› MySQL 5.5 Community Server
› MySQL 5.6 Community Server
› Percona Configuration Wizard
› XtraBackup 搭建主从复制
Great Sites on MySQL
› Percona
› MySQL Performance Blog
› Severalnines
推荐管理工具
› Sequel Pro
› phpMyAdmin
推荐书目
› MySQL Cookbook
MySQL 相关项目
› MariaDB
› Drizzle
参考文档
› http://mysql-python.sourceforge.net/MySQLdb.html
IMFFA
V2EX  ›  MySQL

逗号分隔的字段怎么查询

  •  
  •   IMFFA · Jun 14, 2019 · 6129 views
    This topic created in 2710 days ago, the information mentioned may be changed or developed.
    比如有一个表 table 里面有个 user_ids 字段是这么储存的 1,2,5,7,12,16,25,26,27
    那我怎么去匹配当前登录用户的 id 是否在其中呢
    我尝试了 select * from table where user_ids like '% 用户 id %'
    可是这样的话如果用户 id 是 6,那么 16 和 26 都能匹配上
    18 replies  •  2019-06-14 16:35:24 +08:00
    yxwzaxns
    yxwzaxns
    Jun 14, 2019 via iPhone
    1
    把 userID 的自增值设成你的系统预计服务的用户数量的值,比如 10000 能服务 10 万的用户
    hoythan
    hoythan
    PRO
    Jun 14, 2019
    2
    。。。匹配 ,6,
    niucility
    niucility
    Jun 14, 2019 via Android
    3
    find in set
    echoway
    echoway
    Jun 14, 2019
    4
    select * from table where ','+user_ids+',' like '%, 用户 id, %'

    SELECT * FROM table WHERE instr(','+用户 ID+',' , ','+user_ids+',' ) > 0
    aa65535
    aa65535
    Jun 14, 2019❤️3
    5
    FIND_IN_SET()
    Chemist
    Chemist
    Jun 14, 2019
    6
    就这么爱反范式吗。
    msg7086
    msg7086
    Jun 14, 2019
    7
    可以把表结构转换成更人性化的结构,比如更高范式的结构。
    silentstorm
    silentstorm
    Jun 14, 2019
    8
    这表结构设计的简直让人无话可说,而且查询速度估计也快不了。
    IMFFA
    IMFFA
    OP
    Jun 14, 2019
    9
    @niucility @aa65535
    谢谢回复,哈哈
    find_in_set()完美解决
    IMFFA
    IMFFA
    OP
    Jun 14, 2019
    10
    表是别人设计好的,我也没法改,本人比较菜,sql 不熟练,只好发帖请教
    @kyuuseiryuu @msg7086 @silentstorm
    XuanFei990
    XuanFei990
    Jun 14, 2019
    11
    楼主的头像,以前一直拿来当做桌面来着。。

    只知道叫夏娜,,☺☺
    gaius
    gaius
    Jun 14, 2019
    12
    你是用 Set 存的话,就转成对象 contains 不就行了
    opengps
    opengps
    Jun 14, 2019
    13
    这种建议用外键存储,真要这么用的话修正下楼主的语句:
    select * from table where user_ids like '%,id,%' or user_idslike 'id,%' or user_idslike '%,id'
    注意要查询的 id 前后加逗号,另外就是,针对开头结尾需要兼容下
    IMFFA
    IMFFA
    OP
    Jun 14, 2019
    14
    @XuanFei990
    就是夏娜,出自动漫“灼眼的夏娜”
    XuanFei990
    XuanFei990
    Jun 14, 2019
    15
    @IMFFA 没看过 ,,只是知道名字,仅此而已☺☺
    IMFFA
    IMFFA
    OP
    Jun 14, 2019
    16
    @opengps
    之前也考虑了 select * from table where user_ids like '%,id,%'
    但是没想到头尾兼容,发现匹配不了第一个后放弃了.....
    GGGG430
    GGGG430
    Jun 14, 2019 via iPhone
    17
    将这种多个数字存储改成二进制形式,如要存 3,6 则改成 2∧3+2∧6 = 72,最后该字段实际存储的是 64,查阅的时候只需要在 sql 中 select 64&2∧x 即可,简单方便,缺点就是整形数字有上限
    fuxkcsdn
    fuxkcsdn
    Jun 14, 2019
    18
    @GGGG430 mysql where 条件中用位操作不走索引,还不如用 find_in_set 或者 like
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1106 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 45ms · UTC 23:15 · PVG 07:15 · LAX 15:15 · JFK 18:15
    ♥ Do have faith in what you're doing.