使用外部联接过滤活动记录

时间:2019-12-08 08:14:01

标签: mysql

我有一个简单的会员系统,允许用户上传多个头像,以便他们可以设置要显示的活动头像。 如果他们不选择自定义头像,我也想默认显示头像。 我试图使用MySQL一次显示它,这是我的表的一小段:

E

到目前为止,我使用join获得了什么:

CREATE TABLE IF NOT EXISTS `members` (
  `id` tinyint(4) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) NOT NULL,
  `custom_avatar` tinyint(4) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`)
)

CREATE TABLE IF NOT EXISTS `avatars` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `user_id` tinyint(4) NOT NULL,
  `avatar_file` varchar(255) NOT NULL,
  `active` tinyint(4) NOT NULL,
PRIMARY KEY (`id`)
)

我想我离解决方案不远了,我只需要检查用户是否没有自定义头像(即:如果记录为NULL),然后显示默认头像。 这里的主要问题是,据我所知我无法在其上放一个WHERE子句,所以我无法仅获得活动的化身,这将抵消我到目前为止想要实现的目标。

有什么启发可以使用MySql在单个请求中完成此操作,还是应该进一步在PHP中进行挖掘?

编辑:

预期输出:仅在有活动头像时显示活动头像,如果没有则显示NULL。

我上面发布的查询实际上显示的是用户可能拥有的每个头像,这是我得到的输出示例:

**名称avatar_file **

  • 管理员avatar_admin_03-19-59.jpg
  • 管理员avatar_admin_19-33-29.jpg
  • John NULL
  • 成员1为空

(很抱歉,我不知道如何正确呈现结果)

如果我使用 where active = 1 之类的东西,它会过滤掉我需要弄清楚用户是否具有自定义头像的所有NULL记录。

2 个答案:

答案 0 :(得分:0)

经过一番调查,我发现了这种解决方案,它就像一个魅力:

Sql LEFT OUTER JOIN with WHERE clause

当然,正如Ulla-Brendholdt所建议的那样,我也可以检查null,这是我的错。

答案 1 :(得分:-1)

您应该检查是否为空:

Active = 1 or avatars.user_id IS NULL