这些语句的第三行完全相同:
声明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使用MySQL的DRY原理(在我们的例子中为MySQL,如果这是一个重要因素)?
AND uploadsuccess = 1
谢谢你的帮助。
我建议使用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