我正在建立一个社交网站,无法决定从各种表中获取数据的最佳方式是在Feed中显示。每次存储某些内容时,它都会存储一个时间戳,因此我想知道从时间戳排序的各种不同表中检索数据的最佳方法,每页限制为20个结果。理想情况下,我希望mysql查询所有不同的表并对它进行排序和限制但是因为不同的表并非都是必然相关的,并且需要返回不同的数据,具体取决于表的用途我不认为这是将成为可能。我当然可以单独查询每个表,但是如何将所有信息排序和排序到页面中,以便所有不同的实体一起放在一个有序列表中。我使用的服务器端语言是带有codeigniter框架的PHP。
有人有任何想法吗?
答案 0 :(得分:1)
您能否为所有单独表格中返回的内容建立通用格式?例如,您可以编写一个返回FeedTitle,FeedSummary和Timestamp的查询:
select top 20 *
from (
select a.Title as FeedTitle,
a.A + a.B + a.C as FeedSummary,
a.Timestamp as TimeStamp
from a
union all
select b.Name + ' married ' + b.Spouse as FeedTitle,
b.AtPlace as FeedSummary,
b.TimeStamp as TimeStamp
from b
) as allFeeds
order by TimeStamp desc
对于确切的my-sql语法不确定,这在SQL Server中可以正常工作,应该非常相似。无论如何,它只是伪代码,我们的想法是你在数据库中做一些应用程序逻辑,以便有希望获得性能提升(所以你不必在PHP中对大量数据进行排序)。
另一种方法是从每个表中返回最后20个,并让客户端对它们进行排序。因此,将它们全部发送到UI并让jQuery代码显示前20位,然后让用户动态选择Feed类型,他们会看到任何一种类型或任何类型组合的前20个故事。