Php SQL将值更改为另一个表的下一行

Php SQL将值更改为另一个表的下一行,php,mysql,Php,Mysql,假设我有下一个表结构,表A: | id | |----| | 3 | | 4 | | 7 | 表B: | id | title | last_id | |----|-------|---------| | 1 | a | 1 | | 2 | b | 2 | | 3 | c | 3 | 我想将表的B上一个id从表A更改为下一个匹配的id 示例:(参考表的B第一行) 当前last\u id是1,因此我需要将其值转发到下一个更

假设我有下一个表结构,表A:

| id |
|----|
| 3  |
| 4  |
| 7  |
表B:

| id | title | last_id |
|----|-------|---------|
| 1  |   a   |    1    |
| 2  |   b   |    2    |
| 3  |   c   |    3    |
我想将表的B
上一个id
表A更改为下一个匹配的
id

示例:(参考表的B第一行)

当前
last\u id
1,因此我需要将其值转发到下一个更大的id,从表A

因此,它将:

1->3->4->7

它也可以用PHP实现,但也许有一种方法可以将它保存在SQL Server中

提前谢谢


注意:服务器运行MySQL。

前面的答案是正确的,但我认为不需要+1,因为您只需要值7

UPDATE table_b
   SET last_id = (SELECT MAX(id) FROM table_a)
编辑:

现在,它从表_a中选择比表_b上最后一个_id大的最小值

UPDATE table_b
   SET last_id = (SELECT MIN(id) FROM table_a WHERE id>last_id)

前面的答案是正确的,但我认为不需要+1,因为您只需要值7

UPDATE table_b
   SET last_id = (SELECT MAX(id) FROM table_a)
编辑:

现在,它从表_a中选择比表_b上最后一个_id大的最小值

UPDATE table_b
   SET last_id = (SELECT MIN(id) FROM table_a WHERE id>last_id)

以下代码段是伪代码。

  • 抓取下一张表格\u a
    id

    SELECT id FROM table_a WHERE id > $currentLastId ORDER BY id ASC LIMIT 1
    
  • 如果不是
    null
    ,请更新表b
    最后一个\u id

  • 示例:(参考表b第一行)

    SQL查询将是:

    SELECT id FROM table_a WHERE id > 1 ORDER BY id ASC LIMIT 1
    

    它将返回
    3

    以下代码段是伪代码。

  • 抓取下一张表格\u a
    id

    SELECT id FROM table_a WHERE id > $currentLastId ORDER BY id ASC LIMIT 1
    
  • 如果不是
    null
    ,请更新表b
    最后一个\u id

  • 示例:(参考表b第一行)

    SQL查询将是:

    SELECT id FROM table_a WHERE id > 1 ORDER BY id ASC LIMIT 1
    


    它将返回
    3

    ,并且所有行都是相同的?我的意思是,在进程结束时,表B上最后一个_id的值都是7?是的,这是最终结果。您使用的是哪台数据库服务器?MySQL?Microsoft SQL Server?神谕还有什么吗?MySQL,抱歉我没有指出。MySQL?然后我不确定我的答案是否会正确执行,我对mysql没有太多经验,也许所有行的sintax都是不同和相同的?我的意思是,在进程结束时,表B上最后一个_id的值都是7?是的,这是最终结果。您使用的是哪台数据库服务器?MySQL?Microsoft SQL Server?神谕还有什么吗?MySQL,抱歉我没有指出。MySQL?然后我不确定我的答案是否会正确执行,我对mysql没有太多经验,可能sintax会有所不同。这不就是将
    最后一个id
    设置为
    7
    ,而不经过3和4吗?是的,这就是它要做的。这不是你最后需要的吗?或者你想要的是打印所有的值?我需要一个查询,每次你调用它时,对于从
    表B
    中选择的行,它将把它的
    上一个id
    增加到下一个更大的
    id
    @GuyDavid,但这正是它所做的。它从
    表a
    中选择最大的
    id
    ,并用该值更新
    表b
    中的
    最后一个id
    列。您只需要添加一个
    WHERE
    子句来选择
    表b
    中要修改的正确行。你能扩展你的用例吗?我怀疑您实际上想要的是
    LAST\u INSERT\u ID()
    @Yaroslav您的编辑有一个漏洞-如果
    表a中没有
    ID
    大于当前
    LAST\u ID
    ,那么
    LAST\u ID
    将设置为
    NULL
    ,这不是将
    LAST\u ID
    设置为
    7
    ,不经过3和4?是的,这就是它要做的。这不是你最后需要的吗?或者你想要的是打印所有的值?我需要一个查询,每次你调用它时,对于从
    表B
    中选择的行,它将把它的
    上一个id
    增加到下一个更大的
    id
    @GuyDavid,但这正是它所做的。它从
    表a
    中选择最大的
    id
    ,并用该值更新
    表b
    中的
    最后一个id
    列。您只需要添加一个
    WHERE
    子句来选择
    表b
    中要修改的正确行。你能扩展你的用例吗?我怀疑您实际上想要的是
    LAST\u INSERT\u ID()
    @Yaroslav您的编辑有一个洞-如果
    表a
    中没有大于当前
    LAST\u ID
    ID
    ,则
    LAST\u ID
    将设置为
    NULL