有没有比较好的办法横向合并查询结果

VioletUndead 2009-05-11 10:28:57
有这样一个表
id value
1 123
1 456
1 444
2 11
2 44
怎么得到
1 123 456 444
2 11 44
这种?
...全文
196 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
ACMAIN_CHM 2009-05-11
  • 打赏
  • 举报
回复

另外如果你的MySQL是4.1就支持子查询了不需要MySQL5。如果4.0以下则不行。

关于MySQL如何生成row_number
MySQL中的ROWNUM的实现
http://blog.csdn.net/ACMAIN_CHM/archive/2009/04/20/4095531.aspx
ACMAIN_CHM 2009-05-11
  • 打赏
  • 举报
回复

网页中的话,不如就用你现在的方法,对 group_concat(value) 返回进行一下处理效率反而比较高。比如你可以split 一下然后显示成多列<td>中去。

WWWWA 2009-05-11
  • 打赏
  • 举报
回复
简单地讲,在子查询中生成序号,用静态方法生成交叉表,
5。X支持子查询
VioletUndead 2009-05-11
  • 打赏
  • 举报
回复
谢谢两位
我现在就是用的2楼所说这种,不过在网页表格里把结果放在一个格子了,用逗号隔开显示的
1楼这个可行,貌似mysql不支持from子句子查询的,这个怎么可行的?
ACMAIN_CHM 2009-05-11
  • 打赏
  • 举报
回复

可以简单的用
select id,group_concat(value)
from 一个表
group by id


然后在你的程序中把逗号分隔符替换为TAB,或者直接处理。

如果一定要分列,如果列数不确定的话,则只能通过你的程序或存储过程来实现。

wwwwb 2009-05-11
  • 打赏
  • 举报
回复
select id,max(if(anum=1,values,0)) as a1,
max(if(anum=2,values,0)) as a2,
max(if(anum=3,values,0)) as a3
from (
select a.id,a.value,count(b.id) as anum
from tt a left join tt b on a.id=b.id and a.value>=b.id group by a.id,a.value) a1
group by id
VioletUndead 2009-05-11
  • 打赏
  • 举报
回复
这个sql在加些别的查询条件,执行的速度比一般查询语句明显慢。不过现在数据也不是太多,查询时间显示还是0.多秒的样子。
其实这个感觉还是用程序来弄比较合理。关于存储过程我还不会,所以没法弄。
谢谢两位提供的方案了。
ACMAIN_CHM 2009-05-11
  • 打赏
  • 举报
回复

如果项目比较多或者本身记录很多的情况下用这种SQL语句效率会比较差。或者项目的数量不固定时,如果不能在程序中调整,则建议利用存储过程来实现了。通过存储过程把 order by id, value 的记录放入临时表矩阵。
WWWWA 2009-05-11
  • 打赏
  • 举报
回复
呵呵,sql语句不算复杂吧。
VioletUndead 2009-05-11
  • 打赏
  • 举报
回复
用PHP处理其实是比较好弄的,split能搞定。不过由于整个系统的框架的设置,这个得用smarty模板来处理,smarty没找到类似split的函数。用WWWWA这个方法,不过sql语句比较复杂,查询效率不是太好。

56,681

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧