0

我需要一些支持,因为我在 PHP 和 MySQL 方面不像这个委员会的所有人那样熟练 :) 所以,提前感谢。

我正在使用 PHP 脚本存储来自外部解析的 XML 提要的数据。此脚本每天两次使用 CRON 作业更新 MySQL 数据库。这是这样的 PHP 脚本的一个片段:

mysql_query("UPDATE my_table SET amount=$jackpot->amount WHERE gameId = '".$jackpot->gameId."'")
or die(mysql_error());

这会更新我数据库中的一个表和一行。该表的结构如下(列):

游戏ID | 游戏名 | 金额 | 货币 | 日期

其中“日期”列采用 DATE 格式 (dd/mm/yyyy hh:mm),CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP。

我需要什么...我需要,是的,每天更新此表两次,但我还需要在 DATE 更改时插入具有相同列的新行(每天,新的一天-> 新行)。

我在想类似的东西,用两个词(没有编码):

if today --> update rows
elseif date change (another day, so "tomorrow") --> INSERT new row with updated data (collected from the XML feed)

我怎样才能做到这一点?我是否必须使用 MySQL 查询检查当前数据,然后通过 PHP 插入新行?或者我可以用一堆 PHP 行跳过查询吗?

对不起,但我有点困惑......任何帮助将不胜感激!

再次感谢大家!

4

3 回答 3

2

我建议保持简单:添加一个新dupedate字段以仅存储插入日期。在上面放一个唯一的密钥,然后很简单:

INSERT INTO (gameID, gameName, ammount, currency, date, dupedate) VALUES (...)
ON DUPLICATE KEY UPDATE amount=xxx

如果您“插入”一条与现有记录具有相同日期的记录,您将获得更新。如果是新日期(例如“明天”),您将获得新记录。

这也有一个优点,那就是不像你最初的“获取/检查/更新|插入”版本那样匆忙。这样的过程留下了一些其他过程可能会在您获取记录和执行插入/更新之间复制逻辑并从您下方偷走您的新记录的可能性。

于 2013-01-17T14:46:47.967 回答
2

如果我理解正确,您希望能够每天两次插入/更新数据(尽管次数不应该很重要)并最终在每个唯一日期得到一行数据?

如果您在date列上创建唯一索引并为查询使用INSERT...ON DUPLICATE KEY UPDATE语法,则可以在单个查询中实现此目的。例如

INSERT INTO my_table (amount, currency, date) VALUES (....)
ON DUPLICATE KEY UPDATE amount = '....';

如果您愿意,您可以轻松地增加列的值,而不是重新分配它们。为此,查询的更新部分将如下所示:UPDATE amount = amount + ....

于 2013-01-17T14:46:55.997 回答
0

您应该使用查询来检查是否已经有匹配的行,除非您绝对确定没有添加新游戏。

如果您的脚本在凌晨 1 点和下午 1 点运行,并且您只在凌晨 1 点创建新行,那么在凌晨 2 点添加新游戏(在外部 xml、后端或两者中)将导致错误。

于 2013-01-17T14:48:31.940 回答