【问题标题】:Read next or previous mysql rows and update current row without using cursors or auto-incremented value在不使用游标或自动递增值的情况下读取下一个或上一个 mysql 行并更新当前行
【发布时间】:2014-07-27 14:00:33
【问题描述】:

我需要处理 mysql 表中的一些记录。问题是可递增的 id 不是知道下一条或上一条记录是什么的可靠方法,因为有些记录已被删除。

我的表格有三个字段。

ID、编号、状态

.

我想一次读取一个数字,我不介意每次我想读取下一个或上一个时从数据库中获取它。一旦我得到数字,我想将它加倍并写入值到列状态。

使用游标会很好,但游标不允许我更新我正在读取的基础表。有没有一种解决方案可以让我读取下一个和上一个值,同时允许我更新当前行?

谢谢。

【问题讨论】:

  • 虽然行可能会被删除,但 WHERE id > X ORDER BY id ASC LIMIT 1WHERE id < X ORDER BY id DESC LIMIT 1 之类的内容仍应为您提供下一行/上一行
  • 这很聪明。我想出了这个例子SELECT * FROM randomtable WHERE id > $id ORDER BY id LIMIT 1;,但它是如何工作的?你能解释一下吗?
  • 有什么要解释的?
  • 这很简单。你知道id1 < id2 意味着id1id2 之前插入。现在您需要做的就是找到给定$id最接近 元素。从那里开始,我认为查询是不言自明的——第一个查询找到第一个大于 x 的 id

标签: java php android mysql json


【解决方案1】:

我并不是说这是最好的方法,但可以这样做:

$rows=SELECT id FROM <table>;

foreach($rows as $row){
  $prev=SELECT number FROM <table> WHERE id < $row ORDER BY id DESC LIMIT 1;
  $next=SELECT number FROM <table> WHERE id > $row ORDER BY id ASC LIMIT 1;
  if($prev && $next)
    UPDATE <table> SET = 2($prev+$next) WHERE id=$row;
}

嗯,类似的事情可以通过游标来实现。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-12-11
    • 1970-01-01
    • 2020-01-28
    • 1970-01-01
    • 1970-01-01
    • 2021-09-22
    • 1970-01-01
    • 2010-11-18
    相关资源
    最近更新 更多