我的墙脚本有一个问题,一个帖子在用户自己的墙上显示了多次,在他的朋友墙上显示了一次。例如,如果我有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);
?>请帮我摆脱这个问题。
发布于 2013-08-01 04:15:35
我认为问题出在这句话中:$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);
}https://stackoverflow.com/questions/17957669
复制相似问题