我有三张桌子,
饲料-使用者-以下
我正在尝试显示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 ;
最佳答案
这里的一般想法是在JOIN
表中的following
:
SELECT feeds.*
FROM feeds
LEFT JOIN following ON following.following=feeds.username
WHERE feeds.username=? OR following.username=?
LEFT JOIN
是一种说法:“如果有匹配,则将A与B结合在一起,否则将B保留为所有NULL值”。还有其他类型可以做不同的事情。请注意,使用用户名作为键非常笨拙。我强烈建议您尽快迁移到基于ID的系统。
您还应该远离MyISAM表,因为它们不支持事务并且没有日志。一次简单的服务器崩溃可能完全破坏桌子,无法修复。 InnoDB明显更强大,应尽可能使用它。在MySQL 5.7中,根本没有理由使用MyISAM。
关于mysql - MySQL通过USERNAME和FOLLOWING表选择数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36162456/