我前面发的:高难度排序问题,急寻帮助!已结
发表于:2007-12-19 11:20:55
http://topic.csdn.net/u/20071221/21/5e4b4bbb-fb64-45de-aad8-506a6527a639.html比如有一表TTT有几个字段       
ID         
cde   
cdeid 
pid               
      
          
数据如下   ID                   cde               cdeid               pid 
1                    AAA               2                    2 
2                    DDD               1                    3 
3                    CCC               1                    1 
4                    DDD               3                    1 
5                    DDD               2                    1 
6                    DDD               1                    2 每次搜索都显示表TTT中全部数据,搜索时POST传递数据cde值 
例如搜索时cde=DDD 
排序的规则是: 
1、获取cde=DDD数据并且优先cdeid按从大到小排序然后pid按小到大排序 
2、cde不等于DDD的数据cdeid不排序,pid按小到大排序 如果能满上二条应该搜索如下结果: 
ID                   cde               cdeid               pid 
4                    DDD               3                   1 
5                    DDD               2                   1 
6                    DDD               1                   2 
2                    DDD               1                   3 
3                    CCC               1                   1 
1                    AAA               2                   2 
 
传数据cde=DDD 目前按 账号tim_spac及其它账号的方法已经解决,写法如下
select 
    cde,cdeid,pid 
from 
    TTT 
order by 
    (case cde when 'DDD' then cdeid else 0 end) desc,pid asc 新的问题:比如有二表TTT,FFF    
            
 
FFF表数据如下 
ID                   cde               cdeid               pid 
1                    AAA               2                    2 
2                    DDD               1                    3 
3                    CCC               1                    1 
4                    DDD               3                    1 
5                    DDD               2                    1 
6                    DDD               1                    2 
    TTT表数据如下 ,FFF_ID对应TTT中的ID  
FFF_ID
1
2
3
4
5
6说明TTT表中的FFF_ID中的数据对应FFF中的ID每次搜索都显示表TTT中全部数据,搜索时POST传递数据cde值 
例如搜索时cde=DDD 
排序的规则是:以FFF_ID对应ID中的字段cde,cdeid,pid排序表TTT
1、获取cde=DDD数据并且优先cdeid按从大到小排序然后pid按小到大排序 
2、cde不等于DDD的数据cdeid不排序,pid按小到大排序 如果能满上二条应该TTT表搜索如下结果: 
FFF_ID 

5
6
2
3
1
 
帮高手帮下忙!

解决方案 »

  1.   

    前提假设你原来的排序结果是正确的. 我只连了一次表.没有细看你的要求.select a.*,b.* 
    from fff a
    inner join ttt b
    on a.id=b.fff_id
    (case a.cde  when 'DDD' then a.cdeid   else   0   end)   desc,a.pid   asc  
      

  2.   

    这样排序像以FFF为主表,
    select *  from FFF ....我要达到的是以TTT为主表,要以FFF中的相关字段对TTT查询结果排序,因为TTT中除FFF_ID还有许多数据要查询结果select name,contone,...,fff_id  from TTT ....
      

  3.   

    哪个做主哪个做次?对于inner join没有区别.
    结果排序只依赖于order by. 或者两个表中按连接条件,有不匹配的情况,即ttt中的某个fff_id不存在于 fff或fff中某个id不存在于ttt.
    那么用其它连接方式比如left join等,主次不同取的结果会不同.我不太明白你的意思.
      

  4.   

    我想达到是这样的TTT中肯定有许多字段如:name,content,...等,fff_id我现在要查询TTT中的name,content 是以TTT中fff_id对应FFF表。排序方法就是发贴时写的一般我能看懂形式是
    select   name,content   from   TTT   后面加排序
      

  5.   

    我想达到是这样的 TTT中肯定有许多字段如:name,content,...等,fff_id 我现在要查询TTT中的name,content   是以TTT中fff_id对应FFF表中ID,排序方法就是发贴时写的 一般我能看懂形式是 
    select       name,content       from       TTT       后面加排序 
    你写的那样,那我的name,content应该加在哪位置?
      

  6.   

    a.*,b.*已经把ttt,和fff的所有列取出来了.
    如果你有些列不样,那么只能写列表了.
    比如
    select b.name,b.content,a.pid,a....
      from fff a
    inner join ttt b
      on ..
      order ..a就指的fff表,b指的ttt
      

  7.   

    好像这样写不行,我写如下
    set rs=Server.CreateObject("ADODB.Recordset")
    select a.*,b.name,b.content 
        from fff a
    inner join ttt b
        on a.id=b.fff_id
        (case a.cde  when 'DDD' then a.cdeid   else   0   end)   desc,a.pid   asc  
    rs.open sql,conn,1,1do while not rs.eof
     此中间提取 rs("b.name")
    rs.MoveNext                                              
    loop以上运行不了不知道哪点写错了
      

  8.   

    昏..
    set   rs=Server.CreateObject("ADODB.Recordset") 
    sql = "select   a.*,b.name,b.content   " & _
    "        from   fff   a " & _
    "inner   join   ttt   b " & _
    "        on   a.id=b.fff_id " & _
    "        (case   a.cde     when   'DDD'   then   " & _
    " a.cdeid       else       0       end)       " & _
    " desc,a.pid       asc     "
    rs.open   sql,conn,1,1 
      

  9.   

    少了个
    order by行了,谢谢