如果只有这四个值还比较好办:
select 1 as forder ,* 
from user
where id=3
union
(select 2 as forder ,* 
from user
where id=7)
union
(select 3 as forder ,* 
from user
where id=8)
union
(select 4 as forder ,* 
from user
where id=2)
order by forder
若不止这四个值,可能你需要再建一个表(t_order)
forder fvalue
1       3
2       7
3       8
4       2select t1.* 
from user join t_order on user.id=t_order.fvalue
order by t_order.forder

解决方案 »

  1.   

    select * from user where id=3
    union
    select * from user where id=7
    union
    select * from user where id=8
    union
    select * from user where id=2
      

  2.   

    icevi,你说的我意思理解了,但是如何"以id在这个字符串中出现的位置作为排序的依据."呢?
      

  3.   

    好个按钮!
    一点小建议,组成字符串的时候最好用分隔符各个数值,如
    3,7,8,2组成字符串"3-7-8-2"或者"3,7,8,2",这样的话就不会出现因为前后数字连在一起发生错误了。
    select * from user
     where instr(v_list, id) > 0
     order by instr(v_list,id)
      

  4.   

    KingSunSha(弱水三千) :不会判断一下instr(V_list,id) 是否是奇数啊?
      

  5.   

    两位高手,好像不太对阿
    select userid from userinfo where userid in (12,1,11) order by instr('12,1,11',userid)
    结果是1,12,11这样排序阿!,还是先找到了1的位置
      

  6.   

    你用什么数据库的?这样写,加上是否是奇数的判断.
    select userid from userinfo 
    where userid in (12,1,11)  and 
       int(instr('120111',userid)/2)<>instr('120111',userid)/2
    order by instr('120111',userid)
      

  7.   

    好象SQL SERVER中是:
    select userid from userinfo 
    where userid in (12,1,11)  and 
      instr('120111',userid)%2=1
    order by instr('120111',userid)   
      

  8.   

    select instr('12,1,11',userid) as x,
    userid from userinfo where userid in (12,1,11) order by  x
      

  9.   

    select instr('12,1,11,',userid+",") as x,
    userid from userinfo where userid in (12,1,11,) order by  x 
      

  10.   

    progame:这样不对的,因为1在这里第一个字符就匹配了,返回是1,而正确的应是返回4.
    仔细想想我的也不对.贴主快点说是什么数据库吧,因为各种数据库函数不一样的!
      

  11.   

    按钮,请看清楚userid+","'12,1,11,'
      

  12.   

    我在我论坛中关于版主的添加就是这样的progame|progame|others!如果确定是否为版主就是like '%username|%'
      

  13.   

    因为对于1这个纪录,instr()返回的是1,如果你做成01就行了
      

  14.   

    progame:第二种也不对啊!
    这样吧:
    select instr('[12][1][11]','['+cast(userid as char)+"]") as x,
    userid from userinfo where userid in (12,1,11) order by  x 这样应该不会错了:
    其实用我的方法也可以,就是不加分隔符,只是SQL的函数不记得,不敢瞎写,写个ACCESS的吧:
    select userid 
    from userinfo 
    where mod(instr('120111',format(userid,"00")),2)=1
    order by instr('120111',format(userid,"00"))
      

  15.   

    因为对于1这个纪录,instr()返回的是1,如果你做成01就行了
      

  16.   

    : icevi(按钮工厂)(女) (2001-11-16 23:52:51)  得0分 
    progame:这样不对的,因为1在这里第一个字符就匹配了,返回是1,而正确的应是返回4.
    仔细想想我的也不对.贴主快点说是什么数据库吧,因为各种数据库函数不一样的!  
    说的是你的第一种方法!
      

  17.   

    progame:我是说我在你第一个回复前的那两个不对:)
      

  18.   

    哈哈,火力太密集了哦:DDDD搞得头都晕了~~~~~~
      

  19.   

    老说你要去学C++,哼,我以后天天就说我去学C# !!!开个玩笑:-)我以数据库为主,可能不会去学C++之类了的:-)马上去刷牙:-DD
      

  20.   

    試一下這個。我在SQL 2000下測試通過了。select * from tblName 
    WHERE
    SecID IN  (1107901,522487,859150)
    ORDER BY
    CHARINDEX(CAST(SecID AS VARCHAR)+',','1107901,522487,859150')
      

  21.   

    select * from tblName 
    WHERE
    SecID IN  (1107901,522487,859150)
    ORDER BY
    CHARINDEX(CAST(SecID AS VARCHAR)+',','1107901,522487,859150,') --少了個,號
      

  22.   

    最后再改一次,SQL SERVER:
    用分隔符
    select userid
    from userinfo
    where userid in (12,1,11) 
    order by  charindex('['+cast(userid as varchar)+']','[12][1][11]') 用定长字符串还是不行,会有问题:-(还是用分隔符的好。
      

  23.   

    KingSunSha(弱水三千)比较聪明.
    另外,可以采用MSSQL的CASE句法。
    select *, 
    CASE ID 
      WHEN 3 THEN 1 
      WHEN 7 THEN 2 
      WHEN 8 THEN 3 
      WHEN 2 THEN 4 
      ELSE 99 
    END
    AS ListOrder 
    from user where id in(3,7,8,2)
    ORDER BY ListOrder
      

  24.   

    fhen(风子),你这个方法是静态,不行还是按钮的想法太好了,令人叫绝啊并由此想到我程序中的一个超级大BUG:)谢谢按钮先!
      

  25.   

    太好了,谢谢你icevi(按钮工厂) !真心的