在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中写出来

解决方案 »

  1.   

    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是最简单的方法
      

  2.   

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

  3.   

    而且没有记录是第几个tab的!
    上述代码中,1-5就是表结构没有设计好,应该id tab tabetype
    这样查询就简单了
      

  4.   


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

  5.   

    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
    ....
      

  6.   

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

  7.   

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

  8.   


    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),这样可以用索引,效率自然就上去了
      

  9.   

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

  10.   

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

  11.   

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

  12.   

    select group_concat(tab1 order by tab1 desc) as t1,
    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;
    这样字段排序了,其它的读出数据后再解决