有 3 个实体-articles
和。对如何在数据库中存储数据没有任何限制。同一篇文章可以同时在多个期刊上发表。journals
subscribers
如何从订阅期刊中选择所有已发表的文章,按发表日期排序且不重复?
最简单的方法:
创建一个包含文章的表格: posts
p_id
,j1_id
,j2_id
,text
,date
创建一个带有订阅的表: follows
f_id
,u_id
,j_id
(u_id — 是来自表users的用户 id )执行:
示例查询
select posts.* from posts inner join follows on (j_id = j1_id or j_id
= j2_id) where u_id = 1 order by date desc
此查询返回具有重复项的数据。您可以使用机制DISTINCT
或GROUP BY
,但它会创建一个额外的排序操作来删除重复项。
另一种方法可以使用机制来完成UNION
,但它也使用DISTINCT
.
(select posts.* from posts inner join follows on j_id = j1_id where u_id = 1)
union
(select posts.* from posts inner join follows on j_id = j2_id where u_id = 1)
order by date desc
也许我以自己的方式选择了不正确的存储结构。
实际上的问题是,是否有可能对这个问题做点什么,以尽量减少大数据所需的时间?