0

有 3 个实体-articles和。对如何在数据库中存储数据没有任何限制。同一篇文章可以同时在多个期刊上发表。journalssubscribers

如何从订阅期刊中选择所有已发表的文章,按发表日期排序且不重复?

最简单的方法:

  1. 创建一个包含文章的表格: posts p_id , j1_id, j2_id, text,date

  2. 创建一个带有订阅的表: follows f_id , u_id, j_id(u_id — 是来自表users的用户 id )

  3. 执行:

示例查询

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

此查询返回具有重复项的数据。您可以使用机制DISTINCTGROUP 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

也许我以自己的方式选择了不正确的存储结构。

实际上的问题是,是否有可能对这个问题做点什么,以尽量减少大数据所需的时间?

4

1 回答 1

0

您可以使用以下表结构

帖子:pid、文本、日期日志:jid、jtext journals_posts:jid、pid 跟随:fid、uid、jid

select distinct posts.* from posts 
inner join journals_posts on journals_posts.pid = posts.pid 
inner join follows on follows.jid = journals_posts.jid 
where follows.uid = <userid>

为了提高速度,您可以在 journals_posts(jid) follow(uid) 上创建索引

您可能需要在其他字段上创建索引使用“解释”检查哪些表在不使用连接的情况下被扫描

于 2013-03-12T13:45:02.713 回答