gpt4 book ai didi

php - 比较两行的列,如果另一列的不同更改值

转载 作者:行者123 更新时间:2023-11-29 01:43:18 25 4
gpt4 key购买 nike

我有一个带有自动递增键的表 id , item_no可以是连续的一行或两行(因此它们总是有连续的 id s)共享相同的 ref但有不同的right/left (但技术上 item_no 可以在整个表格中重复多次,但这不是问题)和 description有时在连续的行上相同,但有时不同:

id | item_no | description | right\left | ref
1 | 1 | a1 | right | aaa
2 | 1 | a1 | left | aaa
3 | 2 | b1 | right | bbb
4 | 3 | c1 | right | ccc
5 | 3 | c2 | left | ccc
6 | 4 | d1 | right | ddd
7 | 4 | d1 | left | ddd

我的问题是我需要 item_no如果 description 将 -r 或 -l 添加到它的值它的“匹配”行是不同的。

所以我要找的结果是:

id | item_no | description | right\left | ref
1 | 1 | a1 | right | aaa
2 | 1 | a1 | left | aaa
3 | 2 | b1 | right | bbb
4 | 3-r | c1 | right | ccc
5 | 3-l | c2 | left | ccc
6 | 4 | d1 | right | ddd
7 | 4 | d1 | left | ddd

我正在将表导出到 csv,但没有使用太多 php,只是一个 mysql 语句,然后循环输出结果,这在 mysql 语句中是否可行,还是我必须依赖 php 循环?

最佳答案

我会用这个:

update
items inner join
(select item_no from items
group by item_no
having count(distinct description)>1) dup
on items.item_no=dup.item_no
set
items.item_no=concat(items.item_no, '-', substr(rightleft, 1,1))

如果行总是连续的,你也可以使用这个:

update
items i1 inner join items i2
on (i1.id=i2.id+1 or i1.id=i2.id-1)
and (i1.item_no=i2.item_no)
and (i1.description<>i2.description)
set i1.item_no=concat(i1.item_no, '-', substr(i1.rightleft, 1,1))

编辑:如果行总是连续的,而您只需要一个选择而不是更新,您可以使用这个:

select
i1.id,
case when i1.description=i2.description or i2.id is null then i1.item_no else
concat(i1.item_no, '-', substr(i1.rightleft, 1,1)) end,
i1.description, i1.rightleft, i1.ref
from
items i1 left join items i2
on (i1.id=i2.id+1 or i1.id=i2.id-1) and (i1.item_no=i2.item_no)
order by i1.id

关于php - 比较两行的列,如果另一列的不同更改值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13821924/

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