我一直在努力为会话用户提供朋友订阅源。但我最终没有任何结果,或者每个人都能看到它。
表格格式 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那样拥有它。答案 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'
)
希望这已经解决了你的问题。如果没有,请给我一个快速反馈,我会读完整个问题:)