gpt4 book ai didi

php - 具有循环数据的mysql数据库

转载 作者:行者123 更新时间:2023-11-29 05:58:44 27 4
gpt4 key购买 nike

我不确定这个问题的最佳表达方式!

我有一个 mysql 数据库,需要检索和存储过去 24 个数据值,并且数据始终需要是最后 24 个数据值。

我已经完全正常工作了,但我相信一定有更好的方法来做到这一点!

刚才我的mysql数据库有id,timestamp等列,然后是24个数据列:

data_01
data_02
data_03
data_04
data_05
etc

不同的id有多个行。

我每小时运行一次 cron 作业,删除列“data_24”,然后重命名所有列:

data_01 -> data_02
data_02 -> data_03
data_03 -> data_04
data_04 -> data_05
data_05 -> data_06
etc

然后添加一个新的空白列:

data_01

然后将新数据添加到这个新的空白列中。

这听起来是一个明智的方法吗,或者有更好的方法吗??

我对这种方法的担心是,必须先删除、重命名和添加列,然后再检索新数据,以便存在用于添加数据的新列。

如果由于任何原因数据检索失败,我的表就会有一个列以 NULL 作为数据值。

最佳答案

像这样重命名列不是一个好主意。

我很好奇你是如何插入和更新这些数据的,但一定有更好的方法来做到这一点。

有两件事看起来可行:

不是重命名列,而是将数据移动到下一列:

  update YourTable 
set data1 = :newvalue,
data2 = data1,
data3 = data2,
...;

或者将数据分散到 24 行而不是 24 列。每个数据都是您表中的一行(或在您的 id 是外键的新表中)。每次插入新值时,您还可以删除同一 ID 的最旧值。您可以在一个原子事务中执行此操作,因此每个 ID 的行数不会多于或少于 24 行。

insert into YourTable(id, data) 
values (:id, :newvalue);

delete from YourTable
where id = :id
order by timestamp desc
limit 1;

这会将行数(但不是数据量)乘以 24,因此对于 1000 行(如您提到的),您谈论的是 24000 行,如果您有适当的索引,这仍然是花生。

我们在 MySQL 中得到了超过 1 亿行的表。处理 24000 行比重写一个包含 1000 行的完整表格要容易得多,这实际上就是您通过重命名列所做的事情。

所以第二种选择当然符合我的偏好。它将为您提供一个简单的结构,如果您决定不清理旧数据,或者将其移至单独的作业,或者坚持使用 100 个项目而不是 24 个,那么您可以通过更改 3 行代码轻松实现,而不是彻底检查您的表结构和应用程序。

关于php - 具有循环数据的mysql数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46936299/

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