客户希望发布信息时,只向某些企业用户发布,用户大概有几千个,发布时从一个树形用户列表中选择,可能会中选几个,也可能全选,或者选几百个,且没有规则,由发布者自由指定。现在我在信息表中加了一个字段,长度很大,存放指定的用户ID,用户查询时则用in去比对,效率很低的,而且用户多了也放不开,请问这种情况数据结构如何设计及使用?

解决方案 »

  1.   

    新增一个表C,包含 信息表ID,用户ID,添加用户时就往表里插数据
    select b.* from 用户表 a, 信息表 b, 表C 
    where a.ID = c.用户ID and b.ID = c.信息表ID
    and a.ID = 某某用户
      

  2.   

    客户希望发布的信息只有指定用户能够看到,我能想到的办法就是在这个信息表中加一个长varchar字段publish_user,把指定的用户ID用逗句隔开放在这里,我想当然的以为需要用in,其实并不需要,仔细分析一下:当需要显示信息列表时,用当前用户ID模糊查询即可:
    select * from info_table where publicsh_user like '%'+#user_id #+'% 这种方式性能应该高于2楼加关联表的方式。