+ -
当前位置:首页 → 问答吧 → mysql 语句实现排序

mysql 语句实现排序

时间:2011-09-14

来源:互联网

在MYSQL中有一有表,
id tab1 tab2 tab3 tab4 tab5
1 1 2 3 4 5
2 3 1 2 2 2
3 10 13 5 4 9
4 11 8 7 6 5

结果:
id tab 位置
3 13 2
4 11 1
5 10 1
3 9 5
4 8 2
4 7 3

有没有用SQL语句实现的??
我现在的思路是Select 5次,然后再对查询结果进行排序 ,可是这样太慢了,有没有别的方法??

规律是:把tab1 到tab5中的数据按从大到小排一下,
就是把tab1到tab5中的所有数据进行排序


并把他们在第几个tab中写出来

作者: tianairtian   发布时间: 2011-09-14

select * from (
select 1,tab1 as tab from tt
union all
select 2,tab2 from tt
union all
select 3,tab3 from tt
union all
select 5,tab4 from tt
union all
select 5,tab5 from tt) a
order by tab

是最简单的方法

作者: wwwwb   发布时间: 2011-09-14

数据少的话可以,可是如果多的话查询5次太慢了,而且没有记录是第几个tab的!如果只是完成任务可以这样写,但是更多的情况要考虑效率!

作者: tianairtian   发布时间: 2011-09-14

而且没有记录是第几个tab的!
上述代码中,1-5就是

表结构没有设计好,应该

id tab tabetype
这样查询就简单了

作者: WWWWA   发布时间: 2011-09-14

引用 3 楼 wwwwa 的回复:

而且没有记录是第几个tab的!
上述代码中,1-5就是

表结构没有设计好,应该

id tab tabetype
这样查询就简单了


表的结构没设计好,那要怎么设计呢??
id, tab, tabetype不太明白

作者: tianairtian   发布时间: 2011-09-14

id tab tabetype
1 1 1
1 2 2
1 3 3
1 4 4
1 5 5
2 3 1
2 1 2
2 2 3
2 2 4
2 2 5
....


作者: WWWWA   发布时间: 2011-09-14

那有没有那种高效率的SQL语句,上面的那个总觉得效率太低了!

作者: tianairtian   发布时间: 2011-09-14

引用 6 楼 tianairtian 的回复:
那有没有那种高效率的SQL语句,上面的那个总觉得效率太低了!

在上个帖子中的软件可以就说过,没有,如果用SP来做,游标循环取值,估计速度更慢

作者: WWWWA   发布时间: 2011-09-14

没有办法,你的表设计如此,则只能用这个UNION语句。

作者: ACMAIN_CHM   发布时间: 2011-09-14

那我我要怎么设计这个表呢??

作者: tianairtian   发布时间: 2011-09-14

引用 9 楼 tianairtian 的回复:
那我我要怎么设计这个表呢??

参考5楼

作者: wwwwb   发布时间: 2011-09-14

引用 10 楼 wwwwb 的回复:

引用 9 楼 tianairtian 的回复:
那我我要怎么设计这个表呢??

参考5楼


id tab1 tab2 tab3 tab4 tab5
1 1 2 3 4 5
2 3 1 2 2 2
==>
id(数据本身的PK) tid(原来的ID) tab tabtype
1 1 1 1
2 1 2 2
3 1 3 3
4 1 4 4
5 1 5 5
6 2 3 1
6 2 1 2
6 2 2 3
6 2 2 4
6 2 2 5

简而言之,就是不要把这些内容放在不同字段里面(tab1-tab5),而是放在不同行里面,通过添加分类字段来区分(tab, tabetype),这样可以用索引,效率自然就上去了

作者: shine333   发布时间: 2011-09-14

没看到效率上去了!因为数据量变大了,他查找的速度就相应的变慢了,我的那个表还有别的数据,是不可能分开的!

作者: tianairtian   发布时间: 2011-09-14

引用 12 楼 tianairtian 的回复:

没看到效率上去了!因为数据量变大了,他查找的速度就相应的变慢了,我的那个表还有别的数据,是不可能分开的!

那是因为你没加索引。
另外,关于"我的那个表还有别的数据,是不可能分开的!"一节,请重新理解一下“关系型数据库”

作者: shine333   发布时间: 2011-09-14

简单说吧,行数多、表多不是问题,SQL天生就是用来处理join和group by的,可是要让已经混合起来的东西分开,别说数据库了,换其他的也困难。好比一筐黄豆和一筐绿豆,混起来,在分开,就要了老命了。

作者: shine333   发布时间: 2011-09-14

引用 12 楼 tianairtian 的回复:
没看到效率上去了!因为数据量变大了,他查找的速度就相应的变慢了,我的那个表还有别的数据,是不可能分开的!

不允许修改表的结构,只有用UNION

作者: wwwwb   发布时间: 2011-09-14

结论很简单。 要么改表结构。 要么使用UNION

作者: ACMAIN_CHM   发布时间: 2011-09-14