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
phx13ye
V2EX  ›  MySQL

mysql guru 们, 可以显示 or 隐藏的字段应该怎么设计?

  •  
  •   phx13ye ·
    Alwayswithme · 2015-07-31 22:39:31 +08:00 · 3699 次点击
    这是一个创建于 3408 天前的主题,其中的信息可能已经有所发展或是发生改变。
    目前想法
    id INT
    name VARCHAR(10)
    email VARCHAR(10)
    display_name TINYINT(1)
    dispaly_email TINYINT(1)

    查询时where语句大概是
    WHERE
    (name LIKE %keyword% AND display_name = TRUE)
    OR
    (email LIKE %keyword% AND display_email = TRUE)

    还有更好的方法吗
    11 条回复    2015-08-05 12:33:04 +08:00
    yangqi
        1
    yangqi  
       2015-07-31 22:43:29 +08:00
    没看懂你要做什么,name/email有个选项是显示还是隐藏?为何?
    phx13ye
        2
    phx13ye  
    OP
       2015-07-31 22:47:05 +08:00
    @yangqi 是的,可以公开或不公开,然后要保证模糊查询只能从公开的信息匹配
    yangqi
        3
    yangqi  
       2015-07-31 22:53:43 +08:00   ❤️ 1
    可能另外一个表要好点吧。既然是显示的,你之前的查询,搜索的逻辑没必要变,只要在输出客户端之前过滤一下就好了

    当然你这样也没什么问题,就是把两个耦合在一起
    HivenYang
        4
    HivenYang  
       2015-07-31 22:54:36 +08:00   ❤️ 1
    听起来挺好的,你总要把用户的设置保存下来吧。把所有设置放到一个字段里如何,用json存起来(方便扩展,添加删除字段都不熟影响)。查询的时候都查出来,再根据用户设置看看显不显示
    phx13ye
        5
    phx13ye  
    OP
       2015-07-31 23:12:34 +08:00
    @yangqi 这些开关到时是join起来的
    phx13ye
        6
    phx13ye  
    OP
       2015-07-31 23:15:55 +08:00
    @HivenYang 这样会把不公开的也查出来,不是吗?
    不显示还应该包括不能查到他,不然一个啥都不显示的人会被查出来
    phx13ye
        7
    phx13ye  
    OP
       2015-08-01 00:13:40 +08:00
    哈,貌似解决了查询和过滤的问题
    SELECT
    id,
    IF (display_email, phone, '---') AS email,
    IF (display_name, name, '---') AS name
    FROM table
    WHERE
    (name REGEXP 'keyword' AND display_name = 1)
    OR (email REGEXP 'keyword' AND display_email = 1);
    phx13ye
        8
    phx13ye  
    OP
       2015-08-01 01:25:38 +08:00
    用不上索引:(
    oott123
        9
    oott123  
       2015-08-01 10:28:00 +08:00 via Android   ❤️ 1
    我觉得你一开始的想法没问题。

    或者你也可以全部查出来,然后再到程序逻辑里去剔除隐藏的用户。
    Septembers
        10
    Septembers  
       2015-08-01 12:38:01 +08:00   ❤️ 1
    我觉得应该吧权限信息放另外一张表
    再做个视图inner join一下
    HivenYang
        11
    HivenYang  
       2015-08-05 12:33:04 +08:00
    @phx13ye 我是想在代码逻辑里做过滤,会把数据查出来,再逻辑层过滤一次。你的做法是直接通过sql解决。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2815 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 15:26 · PVG 23:26 · LAX 07:26 · JFK 10:26
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.