2012-09-14 25 views
0

我想创建一个墙后脚本,如FacebookFacebook的类型新闻提要MySQL查询不工作果然

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

我使用三个表:

  1. 用户:用户ID ,用户名,FNAME,LNAME,性别,电子邮件。

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

  3. 朋友: Id,user1,user2。

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

我使用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次。

请让我知道这个查询有什么问题,并发布我,如果有更好的方法来做到这一点。

回答

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";` 

这将组后进入1行基于POST_ID。

+0

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