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

Posted

技术标签:

【中文标题】Facebook 类型的新闻提要 Mysql 查询无法正常工作【英文标题】:Facebook type news feed Mysql query not working expectedly 【发布时间】:2012-09-14 15:01:33 【问题描述】:

我正在尝试创建一个像 facebook 这样的墙帖脚本

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

我正在使用三个表:

    用户: 用户 ID、用户名、fname、lname、性别、电子邮件。

    帖子: post_id、用户名、posted_by、标题、类型。

    朋友们: ID,用户 1,用户 2。

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

我正在使用 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】:

您需要使用 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 行。

【讨论】:

谢谢 Josh,我忘了使用 GROUP BY。现在工作正常。再次感谢。

以上是关于Facebook 类型的新闻提要 Mysql 查询无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章

Facebook Open Graph API:获取分页用户新闻提要时参数限制的奇怪行为

Facebook API 获取新闻提要

facebook 如何将数据推送到新闻提要?

Facebook iOS SDK 3.2 获取用户新闻提要

如何使用 Graph Api 在 facebook 新闻提要中获取“新添加的照片到相册”

升级图 API 2.0 后从 Facebook 读取新闻提要失败