2013-07-30 4 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

проблема в том, что сообщение пользователя показано несколько раз. например, если у пользователя А есть 2 друга, то его пост будет показан 2 раза на его стене, Шимон Рахленко – user2635872

ответ

0

Я думаю, проблема в этом утверждении: $qfu = "SELECT * FROM my_friends WHERE (user_id = '$user_id' OR friend_id = '$user_id') AND status = '1'"; - если у вас есть 5 друзей, ваш идентификатор появится 5 раз в результате и, таким образом, получит это собственное сообщение 5 раз.

Вы должны избавиться от user_id = '$user_id' части запроса:
$qfu = "SELECT * FROM my_friends WHERE friend_id = '$user_id' AND status = '1'"; - таким образом, вы получите только своим друзьям. У вас уже есть свой идентификатор, поэтому нет необходимости запрашивать его.

Теперь вам нужно поместить код для извлечения сообщений в отдельную функцию, и вы готовы:

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); 
} 
Смежные вопросы