gpt4 book ai didi

MySQL自定义变量增量

转载 作者:行者123 更新时间:2023-11-29 02:04:20 25 4
gpt4 key购买 nike

我有一个类似于 Select incremented integer 的问题但我正在尝试更进一步。

我有一个表(一个跟踪某些代码更改的历史表),其中包括一个 ID (id)、一个修改后的时间戳 (modified) 和一个来自另一个表 (company_id) 的外键。如果我指定一个 company_id,我可以让我的查询递增一个从 1 到 X 的值编号,这表示项目发生的顺序,但它仅适用于特定的 company_id。

所以这个...

    SELECT id, (@rev := @rev+1) AS revision, company_id
FROM code_history AS ch
INNER JOIN (SELECT @rev := 0) AS r
WHERE company_id = '1'

返回...

    ID | revision | company_id
1 | 1 | 1
3 | 2 | 1
4 | 3 | 1
7 | 4 | 1
9 | 5 | 1
12 | 6 | 1

我不知道如何使每个唯一的 company_id 都拥有自己递增的 ID 和修订计数列表,而无需为每个 company_id 查询数据库,即使可能也是如此。

我想要的数据...

    ID | revision | company_id
1 | 1 | 1
3 | 2 | 1
4 | 3 | 1
7 | 4 | 1
9 | 5 | 1
12 | 6 | 1
2 | 1 | 2
8 | 2 | 2
13 | 3 | 2
18 | 4 | 2
19 | 5 | 2
21 | 6 | 2
5 | 1 | 3
6 | 2 | 3
10 | 3 | 3
11 | 4 | 3
14 | 5 | 3

感谢所有帮助,谢谢!

最佳答案

你走对了,你只需要第二个变量来保存最后一个公司 ID,然后将计数器重置为 1

SELECT 
PreSortedRevisions.id,
@rev := if( @lastCompany = PreSortedRevisions.company_id, @rev+1, 1 ) AS revision,
@lastCompany := company_id as Company_ID
FROM
( select ch.company_id,
ch.id
from code_history AS ch
order by ch.company_id,
ch.id ) PreSortedRevisions,
(SELECT @rev := 0, @lastCompany := 0) AS SqlVars
order by
Company_id,
Revision

首先,内部查询预先收集记录并按公司和 ID 对它们进行排序,以便按公司的正确顺序返回它们。

然后,通过测试 @LastCompany := company_id 赋值之前的 IF(),@LastCompany 从 0 开始,并且通过启动 @rev = 1 第一次不同。在第一条记录之后,@LastCompany现在将是最后一个,与记录 2 相同并增加计数器。当公司实际发生变化时,它将计数器重置回 1。

关于MySQL自定义变量增量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9103462/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com