1

我想要控制在网站上同时隐藏一些产品。我认为在数据库上进行更改比更改 sql 并再次加载页面更容易。

我通过以下方式添加了一个新列:

ALTER TABLE product ADD hide BINARY NULL;

它创建了一个 TINYINT(1) 列。如果我将一些产品设为 1 以隐藏,然后将其中一些产品设为 0 以再次显示,我将有一个带有隐藏列的表格,例如:

*hide*
NULL
0
1

当我查询时:

SELECT * FROM product WHERE hide <> 1;

它只显示 0,但不显示 NULL。当我将列更改为 BIT 时,它变成了 BIT(1),相同的查询结果相同。

从逻辑上讲,如果某物被定义为 0 或 1,则没有其他选择。这就是你使用二进制的原因。第三种选择不合逻辑。

为了符合定义,唯一的方法是写如下吗?

SELECT * FROM product WHERE hide <> 1 OR hide IS NULL;

(使用 MySQL 5.6.17)

问题2:您如何暂时隐藏产品?以不同的方式?

4

2 回答 2

0

由于产品可以隐藏或不隐藏,我建议更改字段的定义并对其施加NOT NULL约束。

如此处所述:

首先,使所有当前的 NULL 值消失:

UPDATE `product` SET `hide`=0 WHERE `hide` IS NULL

然后,更新表定义以禁止 NULL:

ALTER TABLE `product` ALTER COLUMN `hide` TINYINT NOT NULL

如果出于某种原因,您真的想保留 NULL 值,则必须将查询更改为您提供的第二个版本。

也就是说,我不会在“临时”隐藏上使用数据库方法。对于这种情况,我认为将产品隐藏在应用程序级别会更好。

于 2018-12-13T08:50:55.573 回答
0

我认为mysql会先搜索有值的行,然后再搜索值本身,这就是为什么不会显示空值的原因。

但如果该值为空白,则将显示该行。

于 2018-12-13T09:08:37.937 回答