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

2015-07-31 22:39:31 +08:00
 phx13ye
目前想法
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)

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

当然你这样也没什么问题,就是把两个耦合在一起
HivenYang
2015-07-31 22:54:36 +08:00
听起来挺好的,你总要把用户的设置保存下来吧。把所有设置放到一个字段里如何,用json存起来(方便扩展,添加删除字段都不熟影响)。查询的时候都查出来,再根据用户设置看看显不显示
phx13ye
2015-07-31 23:12:34 +08:00
@yangqi 这些开关到时是join起来的
phx13ye
2015-07-31 23:15:55 +08:00
@HivenYang 这样会把不公开的也查出来,不是吗?
不显示还应该包括不能查到他,不然一个啥都不显示的人会被查出来
phx13ye
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
2015-08-01 01:25:38 +08:00
用不上索引:(
oott123
2015-08-01 10:28:00 +08:00
我觉得你一开始的想法没问题。

或者你也可以全部查出来,然后再到程序逻辑里去剔除隐藏的用户。
Septembers
2015-08-01 12:38:01 +08:00
我觉得应该吧权限信息放另外一张表
再做个视图inner join一下
HivenYang
2015-08-05 12:33:04 +08:00
@phx13ye 我是想在代码逻辑里做过滤,会把数据查出来,再逻辑层过滤一次。你的做法是直接通过sql解决。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/209959

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX