MySQL通过USERNAME和FOLLOWING表选择数据

时间:2016-03-22 18:32:48

标签: mysql join

我有三张桌子,

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 ;

1 个答案:

答案 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。