gpt4 book ai didi

sql - DRY - 如何将重复代码提取到...存储函数?

转载 作者:行者123 更新时间:2023-12-05 00:15:15 26 4
gpt4 key购买 nike

这些语句的第三行完全相同:

陈述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 原则?

感谢您的帮助。

最佳答案

我建议使用 VIEW:

CREATE OR REPLACE VIEW uploads_current AS
SELECT * FROM `uploads
WHERE `deleted` <> 1 AND `archived` <> 1;

然后你可以用附加条件查询它:

  SELECT * FROM `uploads_current`
WHERE `uid` = :uid;

您可以稍后重新定义 View :

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

关于sql - DRY - 如何将重复代码提取到...存储函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47915797/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com