如果field2不复杂的话,用field2 desc将就一下就好了。

解决方案 »

  1.   

    问题是field2有很多可能的值,而且在现实中的顺序并不是按照字母顺序的:(
      

  2.   

    请说明order by field2='I'的含义
      

  3.   

    order by field1,field2='I',field2='A',field3"
    其中的field2重复了二次,实际上还可能有更多.理论上一种值就重复一次.假设field2有以下可能的值:I,A,D,M,P,N
    现实中我就是要按照上面所列的字母顺序来排序,而不是按照order by field2默认的A-Z字母顺序来排!
      

  4.   

    现实意义就是:如果field2=I,则这条记录会排在field2=A的前面,还会排在field2=M的前面,还会排在上面所列的所有其它值的前面.
    以此类推...
      

  5.   

    哦,明白了
    我在4.1下试了是可以的
    但是因为=成立的时候是1,否则得到0
    所以顺序和你说的是相反的
    即field2='I',field2='A'的顺序是A,I
    field2='A',field2='I'的顺序是I,A
      

  6.   

    MySQL支持表达式排序的,随即排序就可以这样 Order by rand()
    怎么排序是看表达式的值,如果是条件表达式,那么其值就是true(1) or false(0)
    ORDER BY field2='I'是可以把I的放到一起的,至于前后用ASC,DESC指定。
      

  7.   

    这个意思?当然可以啦!
    SELECT * FROM `x1`
      in val 
       1 aaa 
       2 bbb 
       3 ccc SELECT * FROM `x1` order by val='ccc',val='aaa'  
      in val 
       2 bbb 
       1 aaa 
       3 ccc SELECT * FROM `x1` order by val='ccc' desc,val='aaa'
      in val 
       3 ccc 
       2 bbb 
       1 aaa mysql4.0.1通过
      

  8.   

    哈哈,真的支持耶!我发现我最初的错觉来自:表达式排序默认的升序是满足条件的在后面!
    所以,在每一个条件表达式后面加上desc,就可以得到我们正常的思维:满足条件的在前:)谢谢大家,结帖啦~~~~
      

  9.   

    忘了一件事,其实,我已经用一种变通的方法也解决了这个问题.就是不用条件表达式,而是按此字段的值按照真实顺序来编排值,而不是按照英文单词的意义来设定首字母:D,并设置好增加新定单时的缺省字段值字母。如,真实顺序是Insert,Normal,Append,如果按照真实顺序那就应该是I,N,A,就得使用条件表达式。
    但如果我变通一下,强制用A表示Insert,I表示Normal,N表示Append,那不就结啦:p当然,以上仅适用于自己可以编排字段值所代表意义的情况下,有时候还是必须使用条件表达式的。