我想有一个控制隐藏在网站上的一些产品同期。我认为对数据库进行更改比更改sql和再次加载页面更容易。
我添加了一个新列:
ALTER TABLE product ADD hide BINARY NULL;
它创建了一个tinyint(1)列。如果我将一些产品设为1以隐藏,然后再将其中一些设为0以显示,我将有一个带有隐藏列的表,如下所示:
* hide*
NULL
0
1
当我通过以下方式查询时:
SELECT * FROM product WHERE hide <> 1;
它只显示0,但不显示null。当我将列改为位时,它变成了位(1),相同的查询结果是相同的。
从逻辑上讲,如果某个对象被定义为0或1,则没有其他选项。所以你用二进制。第三种选择不合逻辑。
为了符合这些定义,只有这样才能写出下面的内容吗?
SELECT * FROM product WHERE hide <> 1 OR hide IS NULL;
(使用MySQL5.6.17)
问题2:如何暂时隐藏产品?以另一种方式?
2条答案
按热度按时间xtupzzrd1#
我认为mysql会先搜索有值的行,然后搜索值本身,这就是为什么不会显示空值的原因。
但如果该值为空,则会显示该行。
xa9qqrwz2#
由于产品可以隐藏或不隐藏,我建议更改字段的定义并强制
NOT NULL
这方面的限制。如本文所述:
首先,使所有当前空值消失:
然后,更新表定义以禁止空值:
如果出于某种原因,您确实希望保留空值,那么必须将查询更改为您提供的第二个版本。
也就是说,我不会用数据库的方法来“临时”隐藏。对于这种情况,我认为最好将产品隐藏在应用程序级别。