This topic created in 4124 days ago, the information mentioned may be changed or developed.
目前想法
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 replies • 2015-08-05 12:33:04 +08:00
 |
|
没看懂你要做什么,name/email有个选项是显示还是隐藏?为何?
|
 |
|
@ yangqi 是的,可以公开或不公开,然后要保证模糊查询只能从公开的信息匹配
|
 |
|
可能另外一个表要好点吧。既然是显示的,你之前的查询,搜索的逻辑没必要变,只要在输出客户端之前过滤一下就好了
当然你这样也没什么问题,就是把两个耦合在一起
|
 |
|
听起来挺好的,你总要把用户的设置保存下来吧。把所有设置放到一个字段里如何,用json存起来(方便扩展,添加删除字段都不熟影响)。查询的时候都查出来,再根据用户设置看看显不显示
|
 |
|
@ HivenYang 这样会把不公开的也查出来,不是吗? 不显示还应该包括不能查到他,不然一个啥都不显示的人会被查出来
|
 |
|
哈,貌似解决了查询和过滤的问题 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);
|
 |
|
用不上索引:(
|
 |
|
我觉得你一开始的想法没问题。
或者你也可以全部查出来,然后再到程序逻辑里去剔除隐藏的用户。
|
 |
|
我觉得应该吧权限信息放另外一张表 再做个视图inner join一下
|
 |
|
@ phx13ye 我是想在代码逻辑里做过滤,会把数据查出来,再逻辑层过滤一次。你的做法是直接通过sql解决。
|