我需要一些支持,因为我在PHP和MySQL方面不是很熟练,就像在这个板上一样:) 所以,提前谢谢。
我正在使用PHP脚本存储来自外部解析XML Feed的数据。 此脚本每天两次使用CRON Job更新MySQL数据库。 这是一个这样的PHP脚本:
mysql_query("UPDATE my_table SET amount=$jackpot->amount WHERE gameId = '".$jackpot->gameId."'")
or die(mysql_error());
这会更新数据库中的表和行。此表的结构如下(列):
gameId | gameName |金额|货币|日期
其中“date”列为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行跳过查询吗?
抱歉,但我有点困惑...... 任何帮助都会非常感激!
再次感谢所有人!
答案 0 :(得分:2)
我建议保持简单:添加新的dupedate
字段以仅存储插入日期。在它上面放一个唯一的键,然后就是一个简单的问题:
INSERT INTO (gameID, gameName, ammount, currency, date, dupedate) VALUES (...)
ON DUPLICATE KEY UPDATE amount=xxx
如果您“插入”与现有记录具有相同日期的记录,则会获得更新。如果是新日期(例如“明天”),您将获得新记录。
这也有一个优点,就是不要像你最初的“获取/检查/更新|插入”版本一样。这样的过程使得某些OTHER进程可能会复制逻辑并在您获取记录和插入/更新之间从您下面掠掉新记录。
答案 1 :(得分:2)
如果我理解正确,您希望能够每天两次插入/更新数据(尽管次数不重要)并且每个唯一日期最终会有一行数据?
如果在date
列上创建UNIQUE索引并对查询使用INSERT...ON DUPLICATE KEY UPDATE语法,则可以在单个查询中实现此目的。 e.g。
INSERT INTO my_table (amount, currency, date) VALUES (....)
ON DUPLICATE KEY UPDATE amount = '....';
您可以轻松地增加列的值,而不是根据需要重新分配它们。为此,查询的更新部分如下:UPDATE amount = amount + ....
答案 2 :(得分:0)
您应该使用查询检查是否已有匹配的行,除非您绝对确定没有添加新游戏。
如果您的脚本在凌晨1点和下午1点运行,并且您只在凌晨1点创建新行,则在凌晨2点(在外部xml,您的后端或两者中)添加新游戏将导致错误。