在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中写出来
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中写出来
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是最简单的方法
上述代码中,1-5就是表结构没有设计好,应该id tab tabetype
这样查询就简单了
表的结构没设计好,那要怎么设计呢??
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
....
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),这样可以用索引,效率自然就上去了
group_concat(tab2 order by tab2 desc) as t2,
group_concat(tab3 order by tab3 desc) as t3,
group_concat(tab4 order by tab4 desc) as t4,
group_concat(tab5 order by tab5 desc) as t5
from table;
这样字段排序了,其它的读出数据后再解决