【问题标题】:How have you set up your database? Do you have to change a lot with a new year? [closed]你是如何建立你的数据库的?新的一年你需要改变很多吗? [关闭]
【发布时间】:2021-01-02 00:09:28
【问题描述】:

我有一个关于数据库的问题。您的数据库实际上是什么样的?假设您有一个报价表。

例如,现在是 2021 年。您在年底有 1000 个(id AUTO_INCREMENT)请求,因此是 1000 行。

如果 2022 年的报价单必须重新从 0 开始,您如何使它们可用?您会制作一个全新的表格并更改网站上各处的代码(就像我一样)吗?还是您的处理方式完全不同?

【问题讨论】:

  • 为什么需要重新从 0 开始?一个自动增量字段应该唯一地代表每一行。因此不能有重复。如果您正在创建具有相同列集的多个表,只是为了表示不同的年份,那么您正在对数据进行非规范化并使其更难搜索等等。只需将年份作为另一列添加到报价表中。如果您需要对报价进行编号,并在每个新的一年重新开始,您可以在您的 UI 应用程序中即时计算它,或者可以在表中存储另一列。但不要制作新表。
  • @ADyson 感谢您的评论。这是因为关于它的许多问题。比如,我们现在在 3 个月内有多少报价?我们现在在 6 个月内有多少报价?并且全年无休。如果你每年重新编号,你不能轻易回答这个问题吗?
  • @ADyson 我现在确实做的是插入本地日期时间(年)的列“年”。
  • 只需将日期与报价编号一起存储(但与报价编号分开)
  • 正如我和草莓所说,只需将日期与每一行一起存储在表中,然后您可以通过简单的 COUNT 查询来回答这些问题,并按日期限制行。 (无论如何,如果您曾经删除过一行,那么仅仅查看最新的自动增量编号是不准确的)

标签: php mysql sql database


【解决方案1】:

我会添加一个条目日期列,并在每条记录创建时标记它。然后我会在表中查询在日期窗口中创建的记录。

例子:

下面的代码将在您的表格中添加一个新列。

默认情况下,此列将包含输入记录的日期。
(任何现有记录都将带有您第一次运行查询的日期。)

ALTER TABLE [yourTable]
ADD [entryDate] [datetime] NOT NULL DEFAULT(GETDATE())

之后,您可以像这样计算两个日期之间的记录:

SELECT COUNT(*) AS [RECORD COUNT]
FROM [yourTable]
WHERE [entryDate] BETWEEN '2021-01-01' AND '2022-01-01'

【讨论】:

  • 也许我没有联系,但你确定这是有效的 MySQL 语法吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-07
  • 2013-03-31
  • 2012-01-30
相关资源
最近更新 更多