你能在一个查询中更新ID最高的行吗?

时间:2012-03-18 09:56:37

标签: php mysql

我希望能够更新ID最高的行。 问题是:我找不到任何优雅的解决方案来做到这一点。 到目前为止,这是我最好的尝试:

$highestId = mysql_result(mysql_query('SELECT MAX(id) FROM stats'),0);

mysql_query("UPDATE stats SET views = views +1 WHERE id = $highestId");

也许有一种比我想象的更好的方法。

  • 我每天都在跟踪观看次数
  • 我想让它自动递增最后一个(最高id)日
  • 到了晚上,我正在运行一个创造新的一天的cronjob。

任何关于如何解决这个问题的建议都是受欢迎的,即使这是一个完全不同的方法。

stats => id | views

3 个答案:

答案 0 :(得分:7)

是:

UPDATE stats SET views = views +1 ORDER BY id DESC LIMIT 1

答案 1 :(得分:4)

如果您没有遭受表格排序,可以使用@ dev-null-dweller版本。或者您可以使用子查询。

UPDATE stats SET views = views +1 WHERE id = (SELECT * FROM (SELECT MAX(id) FROM stats) id)

您可以分析这两种解决方案,看看哪种解决方案最适合您的情况。


我认为以下将是您跟踪统计数据的最佳解决方案,不需要cronjob。

创建一个包含两列的表

表:stats

列:stat_date(DATE)PRIMARY,views(INT)

然后运行查询:

$query = "INSERT INTO stats(stat_date, views) VALUES('".date('Y-m-d')."', 1) ".
         'ON DUPLICATE KEY UPDATE views = views + 1';

编辑:我之前为DATETIME列建议了stat_date类型,但显然DATETIME对您没有意义,因为你只想要一天的记录而不是一秒钟。因此,我将DATETIME类型替换为DATE

答案 2 :(得分:2)

您还可以按ID desc对结果进行排序,只需编辑第一个结果。

编辑:太晚了抱歉。 :)