有这样一个表,
[jobs_name]  [jobs_amount]  [img1]
name1          42000   
name2    5000         jpg4
name3    5000   
name4       0         jpg2
name5    0         jpg3希望用SQL排序后可以得到这样的效果
[jobs_name]  [jobs_amount]  [img1]
name2    5000         jpg4
name1          42000   
name3    5000   
name4       0         jpg2
name5    0         jpg3现在的sql是这样的
SELECT 
jobs_name, 
jobs_amount,
img1
FROM 
info_jobs_tbl 
ORDER BY jobs_amount DESC , img1 DESC

解决方案 »

  1.   


    SELECT  
    jobs_name,  
    jobs_amount,
    img1
    FROM  
    info_jobs_tbl  
    ORDER BY jobs_name='name2';
      

  2.   

    排序规则jobs_amount(金额)是第一优先,img1(图片)是其次,也就是说有(金额)的排在最上边,然后是有(图片)的难点在于金额中再做一次排序,既有金额又有图片的放在最上边。规则简单总结为jobs_amount不为空并且img1不为空 > jobs_amount不为空 > img1不为空现在的排序方法的问题是,无法将name2(又有金额,又有图片)一列放到最上边
      

  3.   

    感谢回复,只不过我这个是动态的。具体到以name2为规则不太适用啊,规则是请参考楼上
      

  4.   

    自己搞定了,哈哈SELECT 
    jobs_name, 
    jobs_amount,
    img1
    FROM 
    info_jobs_tbl 
    ORDER BY a.jobs_amount!=0 && a.img1!="" DESC ,a.img1 DESC ,a.jobs_amount DESC
      

  5.   


    select * from test order by (jobs_amount <>'' ) desc,img1 <> '' desc;
      

  6.   

    select name,amount,img1 from (
    select name,amount,img1,if(amount>0,1,0) as a,if(img1='0',0,1) b from aa
    order by a desc,b desc
    ) aaa
      

  7.   

    9楼的有点问题,这个应该可以.
    select name,amount,img1 from (
    select name,amount,img1,if(amount>0,1,0) as a,if(img1='0',0,1) b from aa
    order by a desc,b desc,amount desc ,img1 desc
    ) aaa