当前位置: 首页 > 面试题库 >

DRY-可能如何提取重复的代码到“存储的函数”中?

张通
2023-03-14
问题内容

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

声明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,如果这是一个重要因素)?

谢谢你的帮助。


问题答案:

我建议使用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



 类似资料:
  • 问题内容: jOOQ用户之间的一个常见问题是,如何将a应用于代码生成器中的存储函数返回类型。该手册指定了匹配合格或不合格标识符的代码,因此请使用以下HSQLDB函数: 该函数的参数可以强制使用: 这将产生以下规范: 如何对返回值做同样的事情? 问题答案: 有一个可以使用的综合参数名称。它称为,它也是生成的文字的名称。 以下规范将相同的转换器应用于参数和: 这将产生以下规格:

  • 我正试图将我的代码应用在一个简单的中,并带有参数,并且由于DRY原则使其可重用。正如您所看到的,我在我的两个中使用了相当相同的代码。下面是我希望在中可重用的代码:

  • 我有一个具有以下模式的Spark数据帧。 我想将其转换为另一个具有以下模式的DF 我已经编写了以下代码,但它不编译,并抱怨编码错误。 请建议正确的方法。

  • 我正在制作一个程序,创建一个名为Student的新类,该类设置并获取一些不同的变量。我基本上所有的东西都在工作,除了当我试图将正确打印的数组元素存储到我的ArrayList中时,我得到的是哈希代码。我相信改变一两件小事就能解决问题,但我无能为力。感谢您的任何建议! 主要: 学生班级:

  • 我可以通过Inspect工具找到HTML。我的代码返回的是html,我可以通过“查看页面源代码”工具看到它。因此,这意味着taht Javascript在嵌入代码之前会修改代码。但是,splash的角色是运行javascript并返回HTML,不是吗??回应。body返回页面的源代码,而不返回我上面提到的响应所需的html代码。