我有一个mysql数据库,我支持使用phpMyAdmin。
这是一个分类网站。
这里的问题是,无论何时发布新的分类(并插入到mysql数据库中),我都需要先手动查看。
我的问题是,无论如何要告诉mysql“此记录处于非活动状态,所以不要返回它”?
我知道一种方法,要添加一个名为“state”的列,并将其更改为“active”,以便我想要激活所有分类。但是mysql中是否有其他方法可以做同样的事情呢?
换句话说,我不希望用户搜索网站时返回的记录,如果记录没有被我首先“审核”。
编辑:
我知道WHERE子句,这不是我的Q。 phpMyAdmin中是否还有其他方法?
由于
答案 0 :(得分:6)
不,不是。你应该真正使用“州”栏来获得你想要的东西。我知道WHERE子句,即 不是我的Q在这里。还有别的吗? phpMyAdmin内置的方法?
答案 1 :(得分:5)
没有内置方法。除了上面提到的方法,您还可以尝试使用视图来过滤非活动记录。而不是:
SELECT * FROM table WHERE status = 'active';
使用视图:
CREATE VIEW only_active AS SELECT * FROM table WHERE status = 'active';
然后只是
SELECT * FROM only_active
这可以确保您永远不会偶然获得非活动记录。
答案 2 :(得分:2)
如果您正在使用ORM Doctrine,则可以使用SoftDelete行为,它完全符合您的要求。您可以构建查询,并且“SoftDeleted”记录不会返回。你应该使用Doctrine。
如果你不能使用Doctrine,我会使用Piotr Pankowski的解决方案。唯一的问题是我会使用DateTime
字段而不是Boolean
字段。将字段添加到当前DateTime
,将NULL
设置为未被禁用。
答案 3 :(得分:2)
在行级别上,除了您自己指定的属性之外,没有其他属性。所以,答案肯定是否定的。
使用Piotr描述的视图可能对您有用;特别是如果你扭转局面并且
这样,解决方案可能对您的应用程序透明。
很少注意到:
编辑: 忘记链接http://www.sqlmaestro.com/resources/all/row_level_security_mysql/ 这给出了一些例子和细节。
答案 4 :(得分:1)
在BOOLEAN类型的表格中有一个reviewed
列。将其初始化为false,并在审核列表后更新为true。每当您获得该站点的分类列表时,在WHERE子句中包含reviewed=true
。
phpMyAdmin无法内置。
答案 5 :(得分:1)
如果没有某种数据库字段可以告诉您哪些记录已经过审核,哪些记录没有,那么实际上没有办法实现这一目标。
所以你要得到的唯一明智的答案是“添加一个州域”。
这个问题真的是你不想这样做的原因吗? (特别是如果你已经知道该怎么做)。如果你能回答这个问题,你可能会得到一些有用的帮助来解决你认为明显的答案可能会导致你的问题。