首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使我的mysql查询的朋友饲料上一个大的DB?

如何使我的mysql查询的朋友饲料上一个大的DB?
EN

Stack Overflow用户
提问于 2009-08-08 11:51:49
回答 1查看 856关注 0票数 1

这是我的mysql表方案;

  1. 状态表// has statusID,userID,date,subject,date
  2. 注释表//holds,userID who,date和statusID,它属于
  3. 用户表//持有userID用户名和用户照片URL

根据上面的表格计划,我需要这样做;

使用最少数量的DB查询快速显示从我朋友列表中的用户发布的页面上的所有状态条目(可能高达5,000 friends)

  • show )--在适当的博客

  • 下,每个状态条目的所有评论都显示一个用户名/照片URL,用于每个状态条目,

  • 显示一个用户名/照片URL,用于注释

G 219旁边的所有评论海报

我所追求的结果类似于myspace或facebook,在那里,它只会显示所有的帖子/动作,或者仅仅显示你朋友的任何东西。

您甚至可以将堆栈溢出上的页面与我想要完成的内容进行比较,将我的帖子视为状态帖子,此页面上的所有答案都是状态帖子,然后在此页面的所有答案下,它会显示每个页面下面的注释,它们都有用户信息,有没有更好的方法来完成这个任务而没有这么多的连接和内容?

问题1

是否有更好的方法来完成我所需要的?当它搜索数百万行时,即使使用索引,这还不够快,我的选项是什么?

问题2

是否可以修改它,只显示每个状态帖子上的第一个注释X?如果是这样的话,这会不会加快它的速度,因为它将不必搜索那么多的评论?

下面的好友列表已经在查询中了,原因是我计划将好友列表放到Array中,并将其存储在memcache或APC缓存中,这样就可以减少1个查询

这里是我的查询

代码语言:javascript
复制
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.statusid

PS)一旦它允许我,我会立即开始悬赏。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-08-08 12:00:43

您的联接是基于相同的字段等于两个不同的值,因此它永远无法满足。

代码语言:javascript
复制
 ON fru.auto_id = s.userid
          AND fru.auto_id = c.userid 

您需要两个连接到用户表。

代码语言:javascript
复制
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.statusid
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1248670

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档