我想要一个控件来同时隐藏一些产品在网站上。我认为在数据库上进行更改要比更改sql和再次加载页面容易。
我通过以下方式添加了新列:
ALTER TABLE product ADD hide BINARY NULL;
它创建了TINYINT(1)列。如果我要隐藏一些产品1,然后再将其中一些产品显示0,我将有一个带有hide列的表,如:
*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:如何暂时隐藏产品?用另一种方式?
答案 0 :(得分:0)
由于产品可以是隐藏的也可以是不隐藏的,所以我建议更改字段的定义,并对其施加NOT NULL
约束。
如here所述:
首先,使所有当前的NULL值消失:
UPDATE `product` SET `hide`=0 WHERE `hide` IS NULL
然后,更新表定义以禁止使用NULL:
ALTER TABLE `product` ALTER COLUMN `hide` TINYINT NOT NULL
如果出于某种原因您确实想要保留NULL值,则必须将查询更改为提供的第二个版本。
也就是说,我不会在“临时”皮革上使用数据库方法。对于这种情况,我认为最好在应用程序级别隐藏产品。
答案 1 :(得分:0)
我认为mysql将首先搜索具有值的行,然后搜索值本身,这就是为什么不会显示空值的原因。
但是,如果该值为空白,则会显示该行。