从好友,朋友和用户表中获取数据

时间:2013-06-01 00:40:56

标签: php mysql sql

我一直在努力为会话用户提供朋友订阅源。但我最终没有任何结果,或者每个人都能看到它。

表格格式 http://pastebin.com/XGYmpi5u

CREATE TABLE IF NOT EXISTS `users` (
  `user_id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(32) NOT NULL,
  `password` varchar(32) NOT NULL,
  `first_name` varchar(32) NOT NULL,
  `last_name` varchar(32) NOT NULL,
  `email` varchar(1024) NOT NULL,
  `active` int(11) NOT NULL DEFAULT '0',
  `email_code` varchar(32) NOT NULL,
  `avatar` varchar(55) NOT NULL,
  `type` int(1) NOT NULL DEFAULT '0',
  `protected` int(1) NOT NULL DEFAULT '0',
  PRIMARY KEY (`user_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=9 ;

CREATE TABLE IF NOT EXISTS `feeds` (
  `id` int(6) NOT NULL AUTO_INCREMENT,
  `user_id` int(6) NOT NULL,
  `username` varchar(32) NOT NULL,
  `body` text NOT NULL,
  `date` datetime NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=14 ;

CREATE TABLE IF NOT EXISTS `buddys` (
  `id` int(6) NOT NULL AUTO_INCREMENT,
  `user_one` int(6) NOT NULL,
  `user_two` int(6) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ;

所以我的问题是,如何获取用户数据,以及他们发布的Feed和来源。只有与好友成为朋友的用户才能看到他们制作的帖子,而不是其他任何人。

我尝试过代码:

$user_id = $_SESSION['user_id'];
    if ($getquery = mysql_query("SELECT * FROM feeds f
    INNER JOIN users u ON u.user_id = f.user_id 
    WHERE u.user_id = '$user_id' OR u.user_id IN 
    (SELECT b.user_one OR b.user_two FROM buddys b 
    WHERE b.user_one OR b.user_two = '$user_id')")){

但是,这显示了正确的用户提要,但与任何一位朋友成为朋友的用户仍然可以看到帖子。

users和feeds表具有类似的列。

+---+----------+
| ID | user_id |
+---+----------+

虽然伙伴有

+----+----------+----------+
| ID | user_one | user_two |
+----+----------+----------+

如果表格的字段设置为

+----+----------+---------+
| ID | user_one | user_two| 
+----+----------+---------+
| 1  |    3     |   5     |
+----+----------+---------+

我想通过我的ID获取它,如果它是3并从用户ID 5获取提要。

是的,我希望像Facebook / Twitter那样拥有它。

1 个答案:

答案 0 :(得分:0)

说实话,我还没有读完你的所有问题,但是......

你的子查询在这里:

... OR u.user_id IN 
    (SELECT b.user_one OR b.user_two FROM buddys b 
    WHERE b.user_one OR b.user_two = '$user_id')

你不能这样写。 b.user_one OR b.user_two实际上变成了一个布尔表达式,0为假,其他一切都为真。所以你的查询基本上是

... OR u.user_id IN 
    (0, 1)

您必须使用UNION将两个列合并为一个。

... OR u.user_id IN 
    (SELECT b.user_one FROM buddys b 
     WHERE b.user_one = '$user_id'
     UNION
     SELECT b.user_two FROM buddys b 
     WHERE b.user_two = '$user_id'
    )

希望这已经解决了你的问题。如果没有,请给我一个快速反馈,我会读完整个问题:)