Php SQL将值更改为另一个表的下一行
假设我有下一个表结构,表A: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,因此我需要将其值转发到下一个更
| 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)
以下代码段是伪代码。
id
:
SELECT id FROM table_a WHERE id > $currentLastId ORDER BY id ASC LIMIT 1
null
,请更新表b最后一个\u id
列SELECT id FROM table_a WHERE id > 1 ORDER BY id ASC LIMIT 1
它将返回
3
以下代码段是伪代码。
id
:
SELECT id FROM table_a WHERE id > $currentLastId ORDER BY id ASC LIMIT 1
null
,请更新表b最后一个\u id
列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