V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
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
LionXen
V2EX  ›  MySQL

请教 MySQL 的一个查询问题。

  •  
  •   LionXen · 2016-04-05 02:11:37 +08:00 · 2891 次点击
    这是一个创建于 2949 天前的主题,其中的信息可能已经有所发展或是发生改变。
    初学 MySQL

    有 A 和 B 两个表

    B 表里有个字段 X 来用(a,b,c,d)这种格式存储多个 A 表字段 Y

    有什么办法能通过单个 A 表字段 Y 来查询包含 Y 的 B 表字段 X 数据?

    如下图,我可以用 A 表数据 3 字段 Y 的值 c 来查询出 B 表数据 1 和 2



    求回答,谢谢!
    12 条回复    2016-04-05 12:01:42 +08:00
    yangqi
        1
    yangqi  
       2016-04-05 02:30:18 +08:00
    这种查询相当于搜索了,效率很低,不推荐使用
    fanwei
        2
    fanwei  
       2016-04-05 03:11:39 +08:00
    。。。
    B 表就不应该用这个格式去存数据。
    应该类似下面这样去存


    ID B 表 字段 X
    1 1 a
    2 1 c
    3 1 d
    4 2 c
    5 2 d
    6 3 a
    7 3 d
    8 4 b
    msg7086
        3
    msg7086  
       2016-04-05 03:13:46 +08:00
    首先……

    你还是去学一下数据库范式吧。
    HanSonJ
        4
    HanSonJ  
       2016-04-05 08:12:47 +08:00
    设计就有问题了
    palmers
        5
    palmers  
       2016-04-05 08:17:43 +08:00
    我同意 ls 说法 不能该设计,我觉得只能通过代码和存储过程来做了
    aiver
        6
    aiver  
       2016-04-05 08:55:01 +08:00
    这个是典型的一对多的范式啊, B 表不应该这么存储 A 表的字段值,建议一对多分开存储,这样的搜索效率要高很多。基于目前的表的话,可以使用 mysql 的字符串函数: find_in_set(str1,str2)试试
    stackboom
        7
    stackboom  
       2016-04-05 08:58:52 +08:00
    恩,楼上说的对,可以使用 find_in_set ,其实也可以使用 like 来实现。
    Honwhy
        8
    Honwhy  
       2016-04-05 09:31:50 +08:00 via iPhone
    LionXen
        9
    LionXen  
    OP
       2016-04-05 09:52:04 +08:00
    感谢各位的回答已找到解决办法
    chongzi11
        10
    chongzi11  
       2016-04-05 10:35:03 +08:00
    感谢提问,别人回答之后我也意识到数据库建表得学习一下了。
    zacard
        11
    zacard  
       2016-04-05 11:17:39 +08:00
    楼上说数据库范式的。。。如果小系统是方便的。现在都是大规模分表分库的话,都是反范式设计的。 mysql 用 find_in_set 也是可以的。一般会先通过 es 等搜索引擎查出 id 先
    500miles
        12
    500miles  
       2016-04-05 12:01:42 +08:00
    除了传统多对多设计范式,

    现在大部分数据库 都在提供 json 支持了..
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   784 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 20:34 · PVG 04:34 · LAX 13:34 · JFK 16:34
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.