2013-03-20 82 views
0

我建立一个简单的社交网络中,我有以下的架构(我不包括表中的所有领域,只是那些相关):复杂的SQL查询用于社交网络网站

tbl_users: 
id 
username 

tbl_friends: 
user_id FK tbl_users.id 
friend_id FK tbl_users.id 

tbl_questions: 
id 
user_id 
title 
date_created 

tbl_answers: 
id 
question_id 
body 

我想要的是检索属于用户朋友的所有问题,每个问题有3个答案的限制。结果将有一个有效的限制,可以说我最后5个朋友的问题。我想要一个可扩展的解决方案,如果任何人都可以提供帮助。 我设法做到这一点有2个查询:1查询发现我所有的朋友 SELECT ID FROM tbl_friends其中USER_ID =:身份证或friend_id =:ID

之后,我用的结果为A项WHERE只获取的问题。我无法得到答案,我为每个答案做了SELECT。我的解决方案效率低下,无法扩展,我想为我的问题找到更好的解决方案。

我也必须问这个......在这种情况下,noSQL会更好吗?

+0

非常类似的问题,以http://stackoverflow.com/questions/2129693/mysql-using-limit-within-group-by-to-get-n-结果的每个组/ 2129703。最流行的答案链接到[这个非常好的教程](http://www.xaprb.com/blog/2006/12/07/how-to-select-the-firstleastmax-row-per-group-in-sql /)。 – RandomSeed 2013-03-20 17:27:39

回答

0

你可以尝试一些像:

SELECT <there JOIN between user, friends and questions> 
    LEFT JOIN 
    (SELECT question_id, body 
     FROM tbl_answers 
     WHERE question_id = tbl_questions.id 
     LIMIT 3 
    ) AS Answers3 
    ON Answers3.question_id = tbl_questions.id