首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Facebook类型的新闻提要Mysql查询没有预期的工作

问Facebook类型的新闻提要Mysql查询没有预期的工作
EN

Stack Overflow用户
提问于 2012-09-14 15:01:33
回答 1查看 524关注 0票数 0

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

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

我用的是三张桌子:

  1. 用户:用户sex,用户名,fname,lname,性别,电子邮件。
  2. 帖子: post_id,用户名,posted_by,标题,类型。
  3. 朋友: Id,user1,user2。

当任何用户添加另一个用户时,这两个用户都将添加到“朋友”表中。

我使用mysql视图创建一个临时表,用以下语句存储当前用户的所有朋友:

代码语言:javascript
复制
$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());

我正在使用下面的声明显示页面上的帖子:

代码语言:javascript
复制
$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次。

请让我知道这个查询有什么问题,如果有更好的方法,请给我发邮件。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-09-14 15:26:19

您需要使用MySQL 按组聚合:

代码语言:javascript
复制
$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行。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12427091

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档