我有一个表,有很多不同的查询。
我想添加一项功能,允许我基本上禁用指定的行,以便它们不会显示在网站的任何位置。
现在,显而易见的解决方案是创建一个新列,并在网站上的每个AND ACTIVE=TRUE
查询中添加“SELECT
”。但是,有许多不同的SELECT
查询,追捕每一个查询都是非常不切实际的。我一定会想念一些。
是否有更实用的方法来禁用行?
答案 0 :(得分:4)
考虑创建一个视图,从您的表中选择所有列,但在您按照问题中的建议创建ACTIVE = TRUE
列后应用条件ACTIVE
。如果您重命名原始表并使用表的原名创建视图,则可以在应用新限制条件的情况下无缝地在应用程序中使用它。
CREATE VIEW the_table_name AS (
SELECT
col1,
col2,
col3
FROM the_renamed_table
WHERE ACTIVE = TRUE
);
如果性能似乎无法扩展,您可能需要在ACTIVE
列上添加索引。
答案 1 :(得分:1)
MySQL无法在行级别设置访问权限。你必须用PHP来做。如果您使用的是数据库抽象层,例如Doctrine,则可以快速实现此类功能。如果您的所有查询都直接写在代码中,那么您就不幸了。