2013-07-30 43 views
0

牆壁腳本存在問題,在用戶自己的牆上多次顯示一個帖子,在他的朋友牆上顯示一次。例如,如果我有5個朋友,該腳本將顯示單個帖子5次。牆壁腳本的問題

由於它在朋友牆上展示了一次,這部分工作良好,但問題出現在用戶自己的牆上。

PHP代碼:

$qfu = "SELECT * FROM my_friends WHERE (user_id = '$user_id' OR friend_id = '$user_id') AND status = '1'"; 
$fu = mysql_query($qfu) or die(mysql_error()); 
$rowfu = mysql_num_rows($fu); 
while ($rowf = mysql_fetch_array($fu)) { 
    $user_id = $rowf['user_id']; 
    $friend_id = $rowf['friend_id']; 
    $querymsgs = "SELECT * FROM messages where uid_fk = '$friend_id' OR uid_fk = '$user_id' order by msg_id DESC Limit 1"; 
    $qmsgs = mysql_query($querymsgs) or die(mysql_error()); 
    $row_msgs = mysql_num_rows($qmsgs); 
    while ($msgs = mysql_fetch_array($qmsgs)) { 
     $msg_id  = $msgs['msg_id']; 
     $orimessage = $msgs['message']; 
     $message = tolink(htmlentities($msgs['message'])); 
     $time  = $msgs['created']; 
     $privacy = $msgs['privacy']; 
     if ($privacy == '0') { 
      $privacy = 'Only Me'; 
     } elseif ($privacy == '2') { 
      $privacy = 'Public'; 
     } else { 
      $privacy = 'Friends'; 
     } 
     $uid   = $msgs['uid_fk']; 
     $fullname  = $msgs['fname'] . " " . $msgs['lname']; 
     $face   = $Wall->Avatar($uid); 
     $commentsarray = $Wall->Comments($msg_id); 
?> 

我已經嘗試過以下的代碼,但它也呈現出相同的後多次:

$qfu = "SELECT * FROM my_friends WHERE (user_id = '$user_id' OR friend_id = '$user_id') AND status = '1'"; 
$fu = mysql_query($qfu) or die(mysql_error()); 
$rowfu = mysql_num_rows($fu); 
while ($rowf = mysql_fetch_array($fu)) { 
    if ($user_id == $rowf['user_id']) { 
     $fid = $rowf['friend_id']; 
    } else { 
     $fid = $rowf['user_id']; 
    } 
    $querymsgs = "SELECT * FROM messages M, tbluser U WHERE U.id='$user_id' and M.uid_fk=U.id and (M.privacy='1' or M.privacy='2') order by M.msg_id desc "; 
    $qmsgs = mysql_query($querymsgs) or die(mysql_error()); 
    $row_msgs = mysql_num_rows($qmsgs); 
    $msgs = mysql_fetch_array($qmsgs); 
    $msg_id = $msgs['msg_id']; 
    $orimessage = $msgs['message']; 
    $message = tolink(htmlentities($msgs['message'])); 
    $time = $msgs['created']; 
    $privacy = $msgs['privacy']; 
    if ($privacy == '0') { 
     $privacy = 'Only Me'; 
    } elseif ($privacy == '2') { 
     $privacy = 'Public'; 
    } else { 
     $privacy = 'Friends'; 
    } 
    $uid = $msgs['uid_fk']; 
    $fullname = $msgs['fname'] . " " . $msgs['lname']; 
    $face = $Wall->Avatar($uid); 
    $commentsarray = $Wall->Comments($msg_id); 
?> 

請幫我擺脫掉這個問題。

+1

究竟是不是工作? –

+0

嘗試檢查您的sql請求中的條件有一些可疑(user_id ='$ user_id'或friend_id ='$ user_id')應該不檢查屬於用戶的朋友嗎?我猜測,如果A是B的朋友,那麼B是A的朋友,因此該帖子的所有者被抓到您的查詢 – legrandviking

+0

問題是多次顯示的用戶帖子。例如,如果用戶A有2個朋友,那麼他的帖子將在他的牆上顯示2次,Shimon Rachlenko – user2635872

回答

0

我認爲問題在於:$qfu = "SELECT * FROM my_friends WHERE (user_id = '$user_id' OR friend_id = '$user_id') AND status = '1'"; - 如果你有5個朋友,你的ID將出現5次結果,因此將獲得自己的帖子5次。

你應該擺脫user_id = '$user_id'部分的查詢:
$qfu = "SELECT * FROM my_friends WHERE friend_id = '$user_id' AND status = '1'"; - 這種方式你只得到你的朋友。你已經有了自己的ID,所以不需要查詢它。

現在你需要把代碼抓取消息爲獨立的功能,你可以準備:

function getMessagesById($authorId) { 
    $querymsgs = "SELECT * FROM messages where uid_fk = '$authorId' order by msg_id DESC"; 
    $qmsgs = mysql_query($querymsgs) or die(mysql_error()); 
    $row_msgs = mysql_num_rows($qmsgs); 
    while ($msgs = mysql_fetch_array($qmsgs)) { 
     $msg_id  = $msgs['msg_id']; 
     $orimessage = $msgs['message']; 
     $message = tolink(htmlentities($msgs['message'])); 
     $time  = $msgs['created']; 
     $privacy = $msgs['privacy']; 
     if ($privacy == '0') { 
      $privacy = 'Only Me'; 
     } elseif ($privacy == '2') { 
      $privacy = 'Public'; 
     } else { 
      $privacy = 'Friends'; 
     } 
     $uid   = $msgs['uid_fk']; 
     $fullname  = $msgs['fname'] . " " . $msgs['lname']; 
     $face   = $Wall->Avatar($uid); 
     $commentsarray = $Wall->Comments($msg_id); 
} 

//get all own messages 
getMessagesById($userId); 

//get all friends' messages 
$qfu = "SELECT * FROM my_friends WHERE friend_id = '$user_id' AND status = '1'"; 
$fu = mysql_query($qfu) or die(mysql_error()); 
$rowfu = mysql_num_rows($fu); 
while ($rowf = mysql_fetch_array($fu)) { 
    $friend_id = $rowf['friend_id']; 
    getMessagesById($friend_id); 
}