我有三张桌子,

饲料-使用者-以下

我正在尝试显示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/

10-12 12:51