Получение сообщений от ваших друзей

То, что я пытаюсь сделать, это заполнить новостную ленту сообщениями от друзей $username, которое является именем пользователя сеанса.

Проблема, с которой я столкнулся сейчас, заключается в том, что если пользователь ни за кем не следит или за ним никто не следит (не находится в таблице подписок), то он не увидит свои собственные сообщения в своей ленте новостей.

Все остальное работает нормально.

Пользователь может видеть свою публикацию и людей, на которых они подписаны. Пользователь может видеть свои сообщения, если они подписаны или за ними следят. Пользователь не может видеть свою публикацию, если он не подписан и не отслеживается.

SELECT  p.*
FROM posts p
JOIN follow f
ON p.by IN (f.person_being_followed, '$username')  
WHERE '{$username}' IN (f.person_following, p.by) 
ORDER BY p.id DESC

это также код страницы для отображения этой информации

        <?

$get_posts = mysql_query("SELECT  p.*
FROM posts p
JOIN follow f
ON p.by IN (f.person_being_followed, '$username')  ### the ,$username' shows the logged users posts, but only if they are in the follow table ###
WHERE '{$username}' IN (f.person_following, p.by)  ## the p.by shows the person who posted who logged in, but only if they are in the follow table ##
ORDER BY p.id DESC") or die(mysql_error());

while ($post_row = mysql_fetch_assoc($get_posts)) {

    include './includes/newsfeed/postdetails.tpl';
    include './includes/newsfeed/likeinfo.tpl';
    include './includes/newsfeed/fandlname.tpl';
    include './includes/newsfeed/deletepostbutton.tpl';

?>


    <div style='display: inline-block;width: 560px;padding-top: 10px;padding-bottom: 10px; border-bottom: 1px solid rgba(0,0,0,0.1);'>
    <a style='float: left;' href='./profile.php?u=<?
    echo $post_by;
?>'><img src='' height='50px' width='50px'/></a>
    <div style='float: right; width: 500px;'>
    <p style='color: rgb(59, 152, 96);font-weight: bold; font-size: 13px;
line-height: 1.38;font-family: 'lucida grande',tahoma,verdana,arial,sans-serif;'><a style='color: rgb(59, 152, 96);
font-weight: bold;
font-size: 12px;
line-height: 1.38;text-decoration: none;' href='./profile.php?u=<?
    echo $post_by;
?>'><?
    echo "$fnamepost  $lnamepost";
?></a></p>
    <p style='color: rgb(51, 51, 51);
font-size: 13px;
line-height: 1.38;
font-family: 'lucida grande',tahoma,verdana,arial,sans-serif;'><?
    echo $post_content;
?></p>

    <div style='margin-top: 5px;'><a href='./scripts/like.php?pid=<?
    echo $post_id;
?>' style='color:rgb(109, 180, 137);
font-size: 11px;line-height: 1.28;'><?
    echo "$likedornot ($countlikes)";
?></a><a href='#' class='comment_button' style='margin-left: 10px;color:rgb(109, 180, 137);
font-size: 11px;line-height: 1.28;'><?
    echo "Comment";
?></a><?
    echo $deletecodevariable;
?></div>

<?
    include './includes/newsfeed/comments.tpl';
    ?>
</div></div>
<?
}
?>

таблица mysql для отслеживания

также это моя таблица для отслеживания

mysql таблица для постов

и это моя таблица для сообщений


person Jacob Read    schedule 04.05.2013    source источник
comment
Разве вокруг $username в follow.person_following = '$username' не должно быть кавычек?   -  person asprin    schedule 04.05.2013
comment
Откуда взялся $username - вы его не испортили?   -  person halfer    schedule 04.05.2013
comment
Этот файл включен в состав сайта. Итак, $username уже установлено.   -  person Jacob Read    schedule 04.05.2013
comment
Вы должны сохранитьids в следующей таблице, а не имена пользователей - это было бы более последовательно и более производительно.   -  person moonwave99    schedule 04.05.2013


Ответы (1)


Заменять

$get_posts = mysql_query("SELECT posts.*            
FROM posts
INNER JOIN follow            
ON posts.by=follow.person_being_followed          
WHERE follow.person_following = $username
ORDER BY posts.id DESC");

с

$get_posts = mysql_query("SELECT posts.*            
FROM posts
INNER JOIN follow            
ON posts.by=follow.person_being_followed          
WHERE follow.person_following = '$username'
ORDER BY posts.id DESC") or die(mysql_error());

Используйте mysql_error() для целей отладки, чтобы увидеть, распечатывается ли какое-либо сообщение об ошибке.

person asprin    schedule 04.05.2013