这是一个非常难以解决的问题,我自己解决了这个问题。不幸的是,我没有一个好的答案。您可以使用 UNION 和各种类型的 JOIN,但您可能会严重影响数据库的性能。另外,您会遇到诸如您想要最近 30 个按时间顺序排列的条目之类的问题。您必须在每个子表中查询 30 个条目(可能总共 150 个条目)并在代码中对它们进行排序,因为您不知道哪些子表具有最近的 30 个条目。150 行只是为了拉 30,废话。
老实说,我发现实现这种事情的最好方法是有一个表,可能是你的主表,有专门用于你想从你的子表中显示的内容的列。例如,在您的主表中有类似于、、、、和的列(例如,master_id
如果您created_by
尝试实现 Facebook 的时间线之类的东西)。您可以在子表上设置触发器,以便当您将数据插入其中之一时,它也会自动填充主表中的数据。然后,当您显示时间线时,您只需查询主表,而完全不关心子表。created_time
notification_text
您的架构将类似于:
Table master
- master_id
- created_by
- created_time
- notification_text
Table child1
- id
- master_id
- data1 (used to generate notification_text in master)
Table child2
- id
- master_id
- data21 (collectively used to generate notification_text in master)
- data22 (collectively used to generate notification_text in master)
- data23 (collectively used to generate notification_text in master)
...