“禁用”一些MySql记录,以便在搜索时不返回它们?

时间:2010-09-20 10:53:18

标签: php sql mysql html database

我有一个mysql数据库,我支持使用phpMyAdmin。

这是一个分类网站。

这里的问题是,无论何时发布新的分类(并插入到mysql数据库中),我都需要先手动查看。

我的问题是,无论如何要告诉mysql“此记录处于非活动状态,所以不要返回它”?

我知道一种方法,要添加一个名为“state”的列,并将其更改为“active”,以便我想要激活所有分类。但是mysql中是否有其他方法可以做同样的事情呢?

换句话说,我不希望用户搜索网站时返回的记录,如果记录没有被我首先“审核”。

编辑:

我知道WHERE子句,这不是我的Q。 phpMyAdmin中是否还有其他方法?

由于

6 个答案:

答案 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描述的视图可能对您有用;特别是如果你扭转局面并且

  • 重命名原始表格
  • 在其名称中创建一个仅返回“已审核”记录的视图

这样,解决方案可能对您的应用程序透明。

很少注意到:

  • 数据库不关心phpMyAdmin或任何其他客户端/应用程序是否正在查看数据,所有客户端基本相同;所以暗示你所要求的是不可能的(否则,这个隐藏机制将如何确定它是应该显示行还是隐藏它们?)。
  • 虽然有一个半例外 - 支持行级安全性的RDBMS可以做到这一点(但实际上这样的系统存储了每行的附加属性

编辑: 忘记链接http://www.sqlmaestro.com/resources/all/row_level_security_mysql/ 这给出了一些例子和细节。

答案 4 :(得分:1)

在BOOLEAN类型的表格中有一个reviewed列。将其初始化为false,并在审核列表后更新为true。每当您获得该站点的分类列表时,在WHERE子句中包含reviewed=true

phpMyAdmin无法内置。

答案 5 :(得分:1)

如果没有某种数据库字段可以告诉您哪些记录已经过审核,哪些记录没有,那么实际上没有办法实现这一目标。

所以你要得到的唯一明智的答案是“添加一个州域”。

这个问题真的是你不想这样做的原因吗? (特别是如果你已经知道该怎么做)。如果你能回答这个问题,你可能会得到一些有用的帮助来解决你认为明显的答案可能会导致你的问题。