我一直在处理 mysql 数据库中的一个表,该表在 wamp 服务器上本地保存我正在使用 wamp 中的 phpmyadmin 区域来运行查询。我正在尝试获取数据以执行以下操作:
任何人都可以帮助我有一张包含许多植物记录的表格。一个植物可以有多个名称,该表将其显示为不同的记录。该表名为 new_plantsname
plantid name
1 tree
1 rose
2 bush
3 tree
3 bush
3 rose
这持续了 3000 多条记录
我想要的是合并具有相同植物 ID 的记录并在不同的列中显示不同的名称:
plantid name1 name2 name3 ...
1 tree rose NULL
2 shrub NULL NULL
3 tree rose bush
ETC
乍一看,我相信一种植物不超过 4 个名称。
有人能帮我查询一下吗?我还想将结果保存到新表中
有人给了我以下答案:
select plantid,
max(case when nameRn = 'name1' then name end) Name1,
max(case when nameRn = 'name2' then name end) Name2,
max(case when nameRn = 'name3' then name end) Name3,
max(case when nameRn = 'name4' then name end) Name4
from
(
select plantid, name,
concat('name', @num := if(@plantid = `plantid`, @num + 1, 1)) as nameRn,
@plantid := `plantid` as dummy
from
(
select plantid, name, @rn:=@rn+1 overall_row_num
from yourtable, (SELECT @rn:=0) r
) x
order by plantid, overall_row_num
) src
group by plantid;
这似乎在没有错误的情况下有效,但它没有将记录结合起来,它只保留了第一条记录的名称和 id 而不是其余的。使用的数据:
plantid name
1 tree
1 rose
2 tree
3 rose
3 bush
3 rose
结果:
谁能帮忙