MySQL-Query将具有相同id的行合并,并将该id的所有条目保留为一条记录

MySQL-Query将具有相同id的行合并,并将该id的所有条目保留为一条记录,mysql,sql,phpmyadmin,wampserver,Mysql,Sql,Phpmyadmin,Wampserver,我一直在处理mysql数据库中的一个表,该数据库位于wamp服务器的本地,我正在使用wamp中的phpmyadmin区域来运行查询。我正在尝试获取数据以执行以下操作: 有人能帮我拿一张有许多植物记录的桌子吗。一个工厂可以有许多名称,表中显示为不同的记录。这张桌子叫new_plantsname plantid name 1 tree 1 rose 2 bush 3 tree 3 bush 3 rose 这种情况持续了3000

我一直在处理mysql数据库中的一个表,该数据库位于wamp服务器的本地,我正在使用wamp中的phpmyadmin区域来运行查询。我正在尝试获取数据以执行以下操作:

有人能帮我拿一张有许多植物记录的桌子吗。一个工厂可以有许多名称,表中显示为不同的记录。这张桌子叫new_plantsname

plantid name
1       tree
1       rose
2       bush
3       tree
3       bush
3       rose
这种情况持续了3000多条记录

我想要的是将具有相同plantid的记录组合在一起,并在不同的列中显示不同的名称:

plantid name1 name2 name3 ...
1       tree  rose  NULL
2       shrub NULL  NULL
3       tree  rose  bush 

乍一看,我相信一种植物的名字不超过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
结果:


有人能帮忙吗?问题是MySQL没有很好的行计数方法。根据MySQL文档,常数的使用不能保证有效。它通常是有效的,但也可能有问题

我建议您将这些名称连接到一个字段中。结果如下:

1     tree,rose
2     tree
3     tree,bush,rose
使用SQL:

select plantid, group_concat(name separator ',')
from t
group by plantid
如果你真的想把名字放在不同的列中,你会想到两个选择。一种是使用上面的结果,然后将结果解析为单独的字符串。另一种方法是使用自连接和聚合来计算序列号,如下所示:

select p.plantid, p.name, count(*) as seqnum
from t p left outer join
     t pprev
     on p.plantid = pprev.plantid and
        p.name >= pprev.name
group by p.plantid, p.name

然后将其用作子查询。

是,我不知道它在这里工作,但当我在wamp的phpmyadmin中运行它时,它不会给出结果,它只给我名字,并为restId设置null,这表明您没有得到与这里所说的相同的数据结构。因此,我认为这取决于你制定下一个阶段。在上面的演示中,前面给出的示例非常有效。否则,phpmyadmin可能无法正确处理查询。您是否尝试过在其他管理工具中运行查询???