Facebook类型新闻提要Mysql查询无法正常工作

时间:2012-09-14 15:01:34

标签: php mysql

我正在尝试创建像facebook这样的墙贴文字

在新闻源区域,它应显示当前用户和朋友的帖子。

我使用三张桌子:

  1. 用户: userid,username,fname,lname,sex,email。

  2. 帖子: post_id,username,posted_by,title,type。

  3. 朋友: Id,user1,user2。

  4. 当任何用户添加另一个用户时,两者都将被添加到好友表中。

    我正在使用mysql视图创建一个临时表来存储当前用户的所有朋友:

    $friends = "CREATE VIEW ".mysql_real_escape_string($_SESSION['username'])." AS 
        SELECT users.username "."FROM users, friends "."
        WHERE ((users.username = friends.user1 OR users.username = friends.user2) AND 
        (users.username != '".mysql_real_escape_string($_SESSION['username'])."')) AND 
        (friends.user1 = '".mysql_real_escape_string($_SESSION['username'])."' OR 
        friends.user2 = '".mysql_real_escape_string($_SESSION['username'])."')";
    
    mysql_query($friends) or die(mysql_error());
    

    我使用以下语句在页面上显示帖子:

    $query = "SELECT posts.*, user.fname, user.lname, user.username "."FROM 
        posts, users, ".mysql_real_escape_string($_SESSION['username'])." "."
        WHERE 
        (users.username = ".mysql_real_escape_string($_SESSION['username']) ".username 
        AND users.username = posts.username) OR 
        (users.username = '".mysql_real_escape_string($_SESSION['username'])."' AND 
        users.username = posts.username) 
        ORDER BY posts.post_id DESC LIMIT 0, 11";
    

    问题是,它显示朋友的帖子没有任何问题;但是每个朋友都会重复一次来自当前用户的帖子。

    换句话说,如果我有5个朋友,那么我的每个帖子都会显示5次。

    请告诉我这个查询有什么问题,如果有更好的方法可以发帖给我。

1 个答案:

答案 0 :(得分:0)

您需要使用MySQL GROUP BY聚合:

$query = "SELECT posts.*, user.fname, user.lname, user.username "."
    FROM posts, users, ".mysql_real_escape_string($_SESSION['username'])." "."
    WHERE (users.username = ".mysql_real_escape_string($_SESSION['username']) ".username  
    AND users.username = posts.username)
    OR (users.username = '".mysql_real_escape_string($_SESSION['username'])."' AND 
    users.username = posts.username) 
    GROUP BY posts.post_id
    ORDER BY posts.post_id DESC
    LIMIT 0, 11";`

这会根据post_id将帖子分组为1行。