我有三张桌子,
FEED - USERS - 以下
我正在尝试显示Feed USERNAME = $_SESSION[username]
或者如果当前登录的用户跟随FOLLOWING表中的某人
以下是我当前的查询,它仅根据USERNAME选择所有Feed,而不包括FOLLOWING表
SELECT feed.id, feed.username, feed.status, feed.timestamp, users.image
FROM feed,users
AND users.username = '$username'
ORDER BY feed.id DESC
表设计:
那么如何让这个查询包括来自FOLLOWING表的任何人?
TABLES:
--
-- Table structure for table `feed`
--
CREATE TABLE IF NOT EXISTS `feed` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(100) NOT NULL,
`status` text NOT NULL,
`ipaddress` varchar(100) NOT NULL,
`timestamp` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;
-- --------------------------------------------------------
--
-- Table structure for table `following`
--
CREATE TABLE IF NOT EXISTS `following` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(100) NOT NULL,
`following` varchar(100) NOT NULL,
`ipaddress` varchar(100) NOT NULL,
`timestamp` int(11) NOT NULL,
`isfollowing` int(11) NOT NULL DEFAULT '1',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=16 ;
-- --------------------------------------------------------
--
-- Table structure for table `users`
--
CREATE TABLE IF NOT EXISTS `users` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(50) NOT NULL,
`email` varchar(50) NOT NULL,
`password` varchar(50) NOT NULL,
`user_level` int(11) NOT NULL DEFAULT '0',
`name` varchar(100) NOT NULL,
`image` varchar(100) NOT NULL DEFAULT 'default.png',
`profile_background` varchar(255) NOT NULL DEFAULT 'default_background.png',
`description` varchar(255) NOT NULL,
`went_to_school` varchar(100) NOT NULL,
`worked_at` varchar(100) NOT NULL,
`lives_in` varchar(100) NOT NULL,
`from_originally` varchar(100) NOT NULL,
`expires` datetime NOT NULL,
`ipaddress` varchar(50) NOT NULL,
`browser` varchar(100) NOT NULL DEFAULT 'n/a',
`show_email` int(11) NOT NULL DEFAULT '1',
`timestamp` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=32 ;
答案 0 :(得分:0)
这里的一般想法是NSInvocation
表中的JOIN
:
following
SELECT feeds.*
FROM feeds
LEFT JOIN following ON following.following=feeds.username
WHERE feeds.username=? OR following.username=?
是一种说法“如果匹配则将A与B组合,否则将B保留为所有NULL值”。还有其他类型可以做不同的事情。
请注意,使用用户名作为键,非常笨重。我强烈建议您尽快迁移到基于身份证的系统。
你也应该远离MyISAM表,它们不支持交易而且没有期刊。一个简单的服务器崩溃可以彻底摧毁桌子无法修复。 InnoDB非常强大,应尽可能使用。在MySQL 5.7中,根本没有理由使用MyISAM。