各位大虾:
   我制作的是服装软件,衣服的码数是S,M,L,XL(小码,中码,大码,加大码);当我需要排序时,如果按照字母升序则:L,M,S,XL;如果要求降序:XL,S,M,L;而客户的要求是按照:S,M,L,XL进行排序,像这种在特定环境下的特定排序是如何实现的?或者提供一个思路也好。 谢谢。

解决方案 »

  1.   

    我使用的是 Delphi+SQLServer 、 Delphi+Access
    各位多帮忙,如果能过解决,可以在开帖送分
      

  2.   

    我曾见过一个办法:使用一个新表,里面有两个字段
        码数    序号
        S       1
        M       2
        L       3
        XL      4如果要排序,则进行关联该表,如果要求排序码数的时候,就改为排序[序号]
    这个倒是可以解决问题,但是我觉得太烦了,每次都需要进行关联。各位看看,有没有其他的方法,提供思路也有重奖。
      

  3.   

    老王的办法不错,加个字段(order_field)对应尺寸字段,S,M,L,XL分别对应1,2,3,4,排序时order order_field就可以。
      

  4.   

    同意 oushunbao(快乐的程序员) 的方法
      

  5.   

    很简单啊,写一段排序代码,哪种都行,但大小比较要用一个自定义的函数来实现(因为只有你才知道大小规则),这样就可以对任意自定义的数据进行排序了.
    我们常把此法称为"算法抽象",用类封装算法,具体数据由用户定义,并重载比较器使之可适用于任义类型的用户自定义数据.
    ----------------------------------------------------------------------
    我到觉得: SGP(程式男孩)的方法相对好些;
      

  6.   

    其实关联表是最有效的办法,冗余的数据量也最小
    关联时也仅需一条  SQL 语句而已SELECT *
    FROM maintable LEFT OUTER JOIN
         secondtable ON maintable.码数=secondtable.码数
    ORDER BY secondtable.序号
      

  7.   

    同意 SGP(程式男孩) 的说法,这种想法是最最基本的
     碰上什么问题都可以解决,只不过是自己写一个比较排序的封装包而已嘛
    容易
      

  8.   

    回复: wdsimon(老王(路漫漫其修远兮,吾将上下而求索)) 
    谢谢你的办法,但是一个问题是尺码字段将在很多表中出现:进货单明细、销售单明细、调拨单明细、库存明细、库存变动明细等。我的数据库有40多个表,有50%以上的拥有该尺码字段。回复:SGP(程式男孩)
    你的办法确实能够解决根本问题,但是在Delphi中如何实现?请说得在具体一些。还有,我只要求这一个字段进行这种特定排序,其他的字段还是要按照原来的字母排序规则进行。回复: tccb() 
    谢谢你的支持,但是每次都需要Left Join很麻烦,我们可以讨论一下又没有其他的方法或者思路,大家共同学习,不论别的方法怎样,我们都可以学习一下思路。这也是我们上CSDN的目的嘛。另外,我记得以前谁跟我说过一个办法:可以在数据库中针对某一个字段进行特定安排排序。但是,我始终没有找到相应的接口。请各位继续支持。本文的分数已经增加到200。我的权限不够,等结帖时,我会在开几个帖送分,到时候请接到通知的朋友到相应的帖字里面接分。
      

  9.   

    select *, (case 数码 when 'S' then '1' when 'M' then '2' when 'L' then '3' when 'XL' then '4'  )  as order_no   from yourtable
    order by order_no
    在sql server下可行,在Access不一定可够过
      

  10.   

    select *, (case 数码 when 'S' then '1' when 'M' then '2' when 'L' then '3' when 'XL' then '4' end )  as order_no   from yourtable
    order by order_no
    上面的有些错误
    在sql server下可行,在Access不一定可够过
      

  11.   

    回复 :Manwill71(天皇地虎江山一片)
    你的办法,我基本上可以明白,在Access中的语法可能不太一样,但是意思差不多,应该可以实现,谢谢。但是,总觉得不够灵活。在编译程序之后,就很难再修改和添加了。
      

  12.   

    变换处理:建立新字段
    用S=1,M=2,L=3,XL=4
    对1-4排序,显示就用SML,这样就简单化了
      

  13.   

    我认为你所说的下边的方法很好,我基本都只这样做的,就是在表中输入的是序号,排序时用序号,显示时用LOOKUP这个表。
    ---------------------------------------------------------------
    我曾见过一个办法:使用一个新表,里面有两个字段
        码数    序号
        S       1
        M       2
        L       3
        XL      4如果要排序,则进行关联该表,如果要求排序码数的时候,就改为排序[序号]
    这个倒是可以解决问题,但是我觉得太烦了,每次都需要进行关联。各位看看,有没有其他的方法,提供思路也有重奖。
    ///////////////////////////////////////////////////////
    LOOKUP的方法:
    http://218.56.11.178:8020/web/index.aspx-》下载基地-》例程-数据库/报表-》在DBGRID中下拉列表的显示