这是我的mysql表方案;
根据上面的表格计划,我需要这样做;
使用最少数量的DB查询快速显示从我朋友列表中的用户发布的页面上的所有状态条目(可能高达5,000 friends)
G 219旁边的所有评论海报
我所追求的结果类似于myspace或facebook,在那里,它只会显示所有的帖子/动作,或者仅仅显示你朋友的任何东西。
您甚至可以将堆栈溢出上的页面与我想要完成的内容进行比较,将我的帖子视为状态帖子,此页面上的所有答案都是状态帖子,然后在此页面的所有答案下,它会显示每个页面下面的注释,它们都有用户信息,有没有更好的方法来完成这个任务而没有这么多的连接和内容?
问题1
是否有更好的方法来完成我所需要的?当它搜索数百万行时,即使使用索引,这还不够快,我的选项是什么?
问题2
是否可以修改它,只显示每个状态帖子上的第一个注释X?如果是这样的话,这会不会加快它的速度,因为它将不必搜索那么多的评论?
下面的好友列表已经在查询中了,原因是我计划将好友列表放到Array中,并将其存储在memcache或APC缓存中,这样就可以减少1个查询
这里是我的查询
SELECT s.statusid, s.userid, s.statustype, s.subject,
s.datetime, c.commentid, c.statusid, c.userid,
c.comment, c.datetime, su.disp_name,
su.pic_url, cu.disp_name, cu.pic_url
FROM teststatus AS s
LEFT JOIN teststatuscomments AS c
ON s.statusid = c.statusid
LEFT JOIN friend_reg_user AS su
ON su.auto_id = s.userid
LEFT JOIN friend_reg_user AS cu
ON cu.auto_id = c.userid
WHERE s.userid =1 OR s.userid
IN ( 2, 3, 4, 5, 6, 7, 8, 9,
10, 11, 12, 13, 14, 15, // Remember this list of friend ID's
16, 17, 18, 19, 20 ) //can be from any ammount of ID's up to 5,000
ORDER BY s.statusidPS)一旦它允许我,我会立即开始悬赏。
发布于 2009-08-08 12:00:43
您的联接是基于相同的字段等于两个不同的值,因此它永远无法满足。
ON fru.auto_id = s.userid
AND fru.auto_id = c.userid 您需要两个连接到用户表。
SELECT s.statusid, s.userid, s.statustype, s.subject,
s.datetime, c.commentid, c.statusid, c.userid,
c.comment, c.datetime, su.disp_name,
su.pic_url, cu.disp_name, cu.pic_url
FROM teststatus AS s
LEFT JOIN teststatuscomments AS c
ON s.statusid = c.statusid
LEFT JOIN friend_reg_user AS su
ON su.auto_id = s.userid
LEFT JOIN friend_reg_user AS cu
ON cu.auto_id = c.userid -- EDIT
WHERE s.userid =1OR s.userid
IN ( 2, 3, 4, 5, 6, 7, 8, 9,
10, 11, 12, 13, 14, 15,
16, 17, 18, 19, 20 )
ORDER BY s.statusidhttps://stackoverflow.com/questions/1248670
复制相似问题