让所有的朋友发布使用mysql

时间:2014-09-28 09:34:52

标签: php mysql

我目前正在开发一个社交网站 显示登录用户的帖子,包括他/她朋友的帖子 我已经成功创建了脚本,通过先获取所有帖子 登录用户的所有朋友。然后把它们放在一个会话中。然后得到所有 帖子使用in_array();

MY DB SCHEMA
person_tbl  
  pr_id
  pr_name 

post_tbl 
  po_id
  po_message
  po_prid  (reference pr_id )

friend_tbl
 fr_id
 fr_from_prid
 fr_to_prid

SAMPLE DATA
pr_id   pr_name   
1       Jeniffer
2       Dale
3       Melissa

po_id   po_prid    po_message
1         2        Post by Dale
2         2        Post by Dale 2
3         1        Post by Jen
4         3        Post by Melissa

fr_id  fr_from_prid   fr_to_prid
1          1             2         // Jennifer and Dale were friends

这是我的代码。

$LOGIN_USER_ID = 1 // e.g id of login user ( person_tbl pr_id in database)

unset( $_SESSION['friends'] );
$_SESSION['friends'] = array();

$frdt = ( get all friends by LOGIN USER ); // from database
foreach( $frdt as $fkey => $fval ) {    // get all friends
    $fr_from = $fval['fr_from_prid'];
    $fr_to = $fval['fr_to_prid'];

    if( $LOGIN_USER_ID != $fr_from ) {
      $_SESSION['friends'][] = $fr_from;
    }
    if( $LOGIN_USER_ID != $fr_to ) {
      $_SESSION['friends'][] = $fr_to;
    }
}

$_SESSION['friends'][] = $LOGIN_USER_ID;  // include login user id in friends session

// e.g display of id of friend ( 2, 3 and 1 ) 1 for  login user.
$friends_of_user = $_SESSION['friends'];  

$post_tbl = get_all_post();
foreach( $post_tbl as $key => $val ) {
   $id = $val['po_id'];

   if( in_array( $po_prid, $friends_of_user ) ) {
       // DISPLAY ALL POST
   }    
}

就像我说的那样,我成功获得所有帖子。然而,我想要的是在加载页面时限制帖子,然后像Facebook样式,如果页面向下滚动它将加载另一个帖子。为了缩短它,我想要的只是选择后限0,20然后如果用户向下滚动限制20,40,然后是20,60等等。是否有可能只使用sql查询获取帖子而不进行会话之类的操作?提前谢谢。

2 个答案:

答案 0 :(得分:0)

我不明白你为什么要使用会话而不是普通变量?但是,您实际上可以完全避免使用变量并在单个SQL请求中执行此操作:

SELECT * FROM post_tbl WHERE po_prid IN (SELECT fr_to_prid FROM friend_tbl WHERE fr_from_prid = :current_user_id)

你必须对它进行调整,因为你的表字段不是自我解释的,我不确定fr_from_prid和fr_to_prid是什么意思...

如果您想限制从X开始的Y帖子,那么只需添加:

SELECT * FROM post_tbl WHERE po_prid IN (SELECT fr_to_prid FROM friend_tbl WHERE fr_from_prid = :current_user_id) LIMIT X, Y

然后,您需要使用Ajax调用脚本来获取下一个Y帖子。

答案 1 :(得分:0)

你鼓舞了我@Galithiel!得到了我自己的问题的答案!

select po_message
from post_tbl
LEFT JOIN friend_tbl
  ON po_prid=fr_from_prid OR po_prid=fr_to_prid
WHERE po_prid={$LOGIN_USER_ID}
  OR fr_from_prid={$LOGIN_USER_ID}
  OR fr_to_prid={$LOGIN_USER_ID}
LIMIT 0 , 10