我目前正在开发一个社交网站 显示登录用户的帖子,包括他/她朋友的帖子 我已经成功创建了脚本,通过先获取所有帖子 登录用户的所有朋友。然后把它们放在一个会话中。然后得到所有 帖子使用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查询获取帖子而不进行会话之类的操作?提前谢谢。
答案 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