就是一个判断问题,没想通怎么写,大大们帮个忙!这是我用case预想的,但是没成功!
SELECT name, level, tip FROM user case when WHERE level >0 then ORDER BY level else  ORDER BY tip end DESC  LIMIT 0 , 30就是从表里取出来name level 和tip
如果LVEVL大于0,那么久按照level排序
如果level小于等于零,那么久按照tip排序怎么写。

解决方案 »

  1.   


    SELECT name, level, tip, (if(level>0, level, tip)) s FROM user order by s
      

  2.   


    还是有问题的,比如如下表,是按照你的方式操作的结果name  level  tip  s  
    AAA   3       0    3 
    DDD   1        2    2 
    FFF    2        0     2 
    GGG   2       0     2 
    HHH    2     0     2 
    JJJ    2    0     2 
    KKK   1     0     1 
    LLL   1     0      1 按我想法是,tip大于零的时候,按照tip排序,所以DDD应该在第一个上
    而tip小于等于零的时候再用level排序,好像不是你写的这样
      

  3.   

    如果LVEVL大于0,那么久按照level排序
    如果level小于等于零,那么久按照tip排序
    ===========================
    按我想法是,tip大于零的时候,按照tip排序,所以DDD应该在第一个上
    而tip小于等于零的时候再用level排序
    描述不清..混乱..给出各种情况的数据例子比较好
      

  4.   

    可能是我两次用了不同的举例...意思就是
    TIP大于零的时候,按照TIP排序  TIP小于零的时候  按照LEVEL的大小排序name level tip    
    AAA    3 3 
    DDD    5 2 
    FFF    2 1 
    GGG    6 0 
    KKK    1 4
    LLL    3 0 比如如上例子,tip大于零,先排TIP ,然后按照LEVEL排序
    001  kkk
    002  AAA
    003  DDD
    004  FFF
    005  GGG
    006  LLL谢谢大家
      

  5.   


    可能是我两次用了不同的举例...意思就是
    TIP大于零的时候,按照TIP排序 TIP小于零的时候 按照LEVEL的大小排序name level tip   
    AAA 3 3  
    DDD 5 2  
    FFF 2 1  
    GGG 6 0  
    KKK 1 4
    LLL 3 0  比如如上例子,tip大于零,先排TIP ,然后按照LEVEL排序
    001 kkk
    002 AAA
    003 DDD
    004 FFF
    005 GGG
    006 LLL谢谢大家
      

  6.   

    试下,
    order by  tip>0 desc ,case(tip>0, tip, level) desc
      

  7.   

    ... order by tip>0 desc, tip desc, level其中 tip>0 desc 将记录按 tip 大于 0 和小于等于 0 分成两段,把大于 0 的放在前面
      

  8.   

    上面写错了
    order by  tip>0 desc ,if(tip>0, tip, level) desc