这些语句的第三行完全相同:
声明1
SELECT * FROM `uploads`
WHERE `uid` = :uid
AND `deleted` <> 1 AND `archived` <> 1
声明2
SELECT * FROM `uploads`
WHERE `folder_id` = :folder_id
AND `deleted` <> 1 AND `archived` <> 1
第三行也用在许多其他语句中,假设有 30 种不同的语句;在这个人为的示例中,它的意思是“我们从上传表中获取所有尚未删除或存档的文件”。如果将来我们需要添加第三个限定符(例如AND uploadsuccess = 1
)我们必须编辑 30 条不同的 sql 语句。一点也不干。我们如何在这里通过 SQL 使用 DRY 原则(在我们的例子中是 MySQL,如果这是一个重要因素的话)?
谢谢你的帮助。
我建议使用 VIEW:
CREATE OR REPLACE VIEW uploads_current AS
SELECT * FROM `uploads
WHERE `deleted` <> 1 AND `archived` <> 1;
然后您可以使用附加条件进行查询:
SELECT * FROM `uploads_current`
WHERE `uid` = :uid;
您可以稍后重新定义视图:
CREATE OR REPLACE VIEW uploads_current AS
SELECT * FROM `uploads
WHERE `deleted` <> 1 AND `archived` <> 1 AND uploadsuccess = 1;
然后,查询 uploads_current 的所有代码将隐式包含相同的条件,无需更改代码。
了解有关 VIEW 的更多信息:https://dev.mysql.com/doc/refman/5.7/en/create-view.html https://dev.mysql.com/doc/refman/5.7/en/create-view.html
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)