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

SQL:如果字段不为空,如何按字段排序,否则使用另一个字段

芮朗
2023-03-14
问题内容

我想PostsdtModified(不修改日期时间)将其排序(不修改dtPosted日期时间),否则按(不发布日期时间)排序


问题答案:

似乎我每周在这里就此给出3条建议,也许我应该放弃并放任它:-)不,我不这么认为:

__order by 如果希望数据库很好地扩展,请 不要 在列计算(或子句)中使用逐行函数。你应该为你的具体情况检查性能测量,不要猜测
),但是当做计算 读取 数据库通常会影响你的能力,规模(这不会不管你的通讯录数据库,但我工作在有店铺 巨大的 数额数据的)。

“我如何使我的数据库运行得更快?”的数字是多少?问题远远超过“我如何使用更少的空间?” 那些。这是一条牺牲磁盘空间以提高性能的理想途径。

正确的时间是在数据更改时进行计算。这样,更改成本将在所有读取中摊销。

我的建议是创建另一列,如dtLastAction包含排序值然后使用插入/更新触发器将其设置为相同的dtModified,如果不为空,或者dtPosted如果dtModified为空。从技术上讲,这违反了3NF,但是如果您知道自己在做什么就可以了,并且触发器可以确保这种情况下的数据一致性。

然后在该dtLastAction列上建立索引,以提高查询速度,而在插入和更新过程中以(较少的)额外工作量得到了提高。我之所以说得少,是因为 绝大多数
数据库表的读取频率高于写入的频率(显然,如果您的特殊情况是非常罕见的例外之一,则此方法无用)。

或者,对于这种特殊情况,可以在创建条目时将dtModified和设置dtPosted为相同的值,这意味着它dtModified永远不会
空。您仍然可以检测到由于这两个日期时间值相同而从未被修改的帖子。



 类似资料:
  • 我使用Symfony 5.3。我有一个表单,有3个字段没有映射到任何实体: "原因"-文本, use_predefined复选框 "predefined_reason"-下拉列表。 我构建的表单如下(一个片段): “原因”字段应根据需要显示在UI中,但其他两个字段不应显示。但是,在验证过程中,如果选中了复选框“预定义的原因”,则第一个字段不应为必填字段,而“预定义的原因”应为必填字段。

  • 问题内容: 我正在尝试获取所有用户,并通过另一个表上的字段对他们进行排序,但是此字段并不总是存在吗? 用户-持有用户用户元-持有元数据,特别是“权重”,这是我要根据其排序的内容。 一个更具体的解决方案是自动为它们定义默认权重,但是无论如何,我可以使它不起作用吗?当前工作查询: 失去部分订单,任何/所有帮助将不胜感激! 问题答案: 如果您在表()之间具有关键关系,并且想要列出所有用户,则可以使用类似

  • 问题内容: 如果字段不正确,我想防止用户单击“注册”按钮。部分原因是必须填写某些字段。但条件开始变得有点长: 我该如何简化呢? 问题答案: 我认为您需要为表单内的输入字段提供属性,因此在表单中填写字段之前将是无效的。同样,您也可以在输入中提供其他验证属性。 例:-

  • 问题内容: 我有很多对象。 如何按名称和年龄先后按字母顺序对该数组排序? 您将使用哪种算法? 问题答案: 你可以使用以下方法: 现在按名称排序,然后按年龄排序。 “从字典上比较两个字符串”-来自docs。 是本机库中的静态方法。它会进行实际的排序,你只需要提供一个即可定义应该如何比较列表中的两个元素:这是通过提供你自己的方法实现来实现的。

  • 我有对象数组。 如何按名称和年龄按字母顺序对该数组进行排序? 你会使用哪种算法?

  • 问题内容: 如何获得按字段排序的struct输出? 问题答案: A 是字段的 有序 集合。该包使用反射来获取值的字段和值,并按照定义它们的顺序生成输出。 因此,最简单的解决方案是在已经按字母顺序排列字段的位置声明类型: 如果您不能修改字段的顺序(例如,内存布局很重要),则可以通过为结构类型指定一个方法来实现接口: 所述包检查所传递的值工具,并且如果是的话,调用它的方法,以产生输出。 该解决方案的缺