我有一个社交网站,用户更新他们的情绪,个人资料和添加照片。
我目前正在一个名为"update_log“的表中记录所有更新,其结构如下:
update_id int (auto),
userid int,
update_type int (1=profile, 2=photo, 3=mood)
pictureid int
mood_a int
mood_b int
mood_c int
update_time int配置文件更新记录:(自动),1,1,0,0,0,0,1239003781
照片更新记录:(自动),1,2,11544,0,0,1239003781
情绪更新记录:(自动),1,3,0,1,490,70,1239003781
对于照片记录,有一个相应的表用户照片,它保存标题和文件名/位置数据
对于情绪,有一个情绪查找表,它包含情绪描述(也就是说,我懒惰=\ )
我需要做的是查询这些数据以显示在用户的配置文件页面上,它将在最后x小时的活动中为任何他们最喜欢的用户显示这个提要。
我遇到的问题是,如果一个用户在半个小时内上传了五张照片,我只希望它在提要中是一行,而不是每一张照片上传的条目。
配置文件更新也是如此。
我需要查询数据,这样用户就可以看到如下内容:
用户x更新了他们的心情!(我累了)2009年4月4日晚上10:35
用户y于2009年4月4日晚上10:20上传x张新照片
用户x在2009年4月4日晚上10:15 更新了他们的配置文件
我如何将照片更新分组到一个查询中返回的记录中,这个记录是基于所有记录的,比方说是一个小时?
有办法用一个查询来完成这个任务吗?
谢谢!
发布于 2009-04-06 14:38:40
你想要的东西
SELECT * FROM update_log WHERE update_time > NOW() - 30 MINUTES;30分钟是你回首的时间。
我假设您只需要知道如何在一个查询中返回最后30分钟的更新。
如果您试图将所有照片分组为30分钟的块(例如在过去两天),最好更改数据库结构,创建包含主键、用户If和创建时间的photo_group表,并将group_id列添加到update_log表中。
添加新照片时,请检查该用户在最后30分钟内创建的现有组。
SELECT * FROM photo_group WHERE user_id = XXX AND created > NOW () - 30 MINUTES;
如果一个人不存在,就创造它。通过将photo_group表的主键作为group_id添加到update_log中,将照片链接到最新照片。
稍后检索行时,可以使用脚本语言按group_id对行进行分组。
此方法的缺点是以后很难修改分组结构,因为在更改创建新组的规则时,以前的条目将按其旧组分组。
如果您想在不存储组的情况下完成此操作,则必须在脚本语言中处理逻辑,方法是将照片组合在一个循环中,以检查照片的创建时间;如果照片是在特定时间内创建的,则在数组中对照片进行分组,或者使用与前一张照片不匹配的最新照片重新启动循环。这将比添加一个新表要花费更多的开销,但以后修改将更容易。
发布于 2009-04-06 14:52:34
您是否考虑过尝试使用PHP而不是SQL查询来实现这一点?查询所需的结果(这些时间之间的所有更新),然后使用PHP比较时间戳,以确定如何对它们进行分组,可能不那么复杂。
https://stackoverflow.com/questions/721716
复制相似问题