gpt4 book ai didi

MySQL 按用户名和以下表选择数据

转载 作者:行者123 更新时间:2023-11-29 21:13:28 25 4
gpt4 key购买 nike

我有三张 table ,

动态 - 用户 - 关注

我正在尝试显示一个提要,其中 USERNAME = $_SESSION[username] 或者当前登录的用户正在关注以下表中的某人

这是我当前的查询,它仅根据用户名从提要中选择所有内容,不包括以下表

SELECT feed.id, feed.username, feed.status, feed.timestamp, users.image 
FROM feed,users
AND users.username = '$username'
ORDER BY feed.id DESC

表格设计:

那么如何使此查询包含以下表中的任何人?

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:

 SELECT feeds.*
FROM feeds
LEFT JOIN following ON following.following=feeds.username
WHERE feeds.username=? OR following.username=?

LEFT JOIN 是“如果匹配则将 A 与 B 组合,否则将 B 保留为所有 NULL 值”的一种方式。还有其他类型可以做不同的事情。

请注意,使用用户名作为 key 极其很笨拙。我强烈建议您尽快迁移到基于 ID 的系统。

您还应该远离 MyISAM 表,它们不支持事务并且没有日志。一次简单的服务器崩溃就可能彻底毁坏表,无法修复。 InnoDB 明显更加健壮,应尽可能使用。在 MySQL 5.7 中,几乎没有理由使用 MyISAM。

关于MySQL 按用户名和以下表选择数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36162456/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com