如何在数据库中存储一年中每天的价格?

Rec*_*ioN 1 mysql sql select

我正在研究一个项目但是设计数据库时遇到了问题.我需要存储一年中每天的价格,但我需要能够更改特定日期的价格.

我是否需要每天创建一个列,在这种方法中我必须在表中创建365列.

你对这个问题有什么更好的解决方案,任何帮助将不胜感激,谢谢.

chr*_*con 5

您应该创建一个包含6列的表.

CREATE TABLE IF NOT EXISTS priceHistory (
    `price` decimal(8,2) NOT NULL,
    `date` datetime,
    `productId` VARCHAR(50),
    `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    `createdAt` TIMESTAMP DEFAULT NOW(),
    `updatedAt` TIMESTAMP
) ENGINE = INNODB;
Run Code Online (Sandbox Code Playgroud)

现在您可以插入每天的日期和价格,列created_at,updatedAtid自动插入(并updatedAt自动更新),因此您不再需要为此烦恼.

如果您要在每日基础上保存这些价格并稍后访问数据,您甚至不需要该date列,只需createdAt再次使用该列即可自动创建INSERT.

拥有数据后,您可以查询它

SELECT * FROM priceHistory WHERE DATE(`date`) = '2015-02-29';
Run Code Online (Sandbox Code Playgroud)

您可能还会发现有关DATE函数的mysql文档很有用.

编辑

正如@murenik在他的回答中提到的那样,推荐的方式是建立一个与表格的关系,保存您可能拥有的产品详细信息.为此,请将productId语句更改为

productId INT PRIMARY KEY REFERENCES products(id),
Run Code Online (Sandbox Code Playgroud)

这将链接这些表,使未来的查询更容易,更有效.

SELECT ph.*, p.* 
FROM products p 
INNER JOIN priceHistory ph on p.id = ph.productId
Run Code Online (Sandbox Code Playgroud)

请参阅mysql JOIN.