或许我的表述有些模糊,下面我详细说说,例如表结构如下:
Table1(ID,a,a_Extra,b,c,d,e)
而我目前的关键字是k
我要取出rs(a)=k的放在前面,加上rs(a_Extra)包含k的放在后面
就是类似于一个多字段的搜索,但由于条件一是精准匹配,所以比条件二优先。
但是不能做成两个语句先后执行,否则会出现大量重复条目。
也不能先把数据以两个语句取出,然后程序去重,因为数量庞大甚至到要分页的程度。各位达人有没有点子呢?

解决方案 »

  1.   

    这样对于服务器的压力也太大了,一方面要从数据库中取出比原本需要的多几十几百倍的数据,一方面还有巨大的计算量,如果数据再多些,访问量再大些呢?一个pv产生100个pv的服务器压力和数据库压力,也太不值了吧?对于这种情况,在sql语句里就没有什么比较好的实现么?
      

  2.   

    没有多取啊  数据库是limit 900,50;
      

  3.   

    你还没明白我的意思哦,关键不在于最后这个limit,而在于前面,前面要怎么写才能把符合要求的数据按符合要求的顺序取出来。
    也就是说取出符合条件一的数据、符合条件二的数据、符合条件三的数据,并且把符合条件一的排在最前面、符合条件二的紧接、最后是符合条件三的数据(而不是把它们混合在一起按某字段排序),并且去除其中重复的数据。
      

  4.   

     (不要高估你的汉语表达能力或者我的汉语理解能力)
       建议你列出你的表结构,并提供测试数据以及基于这些测试数据的所对应正确结果。
       参考一下这个贴子的提问方式http://topic.csdn.net/u/20091130/20/8343ee6a-417c-4c2d-9415-fa46604a00cf.html
       
       1. 你的 create table xxx .. 语句
       2. 你的 insert into xxx ... 语句
       3. 结果是什么样,(并给以简单的算法描述)
       4. 你用的数据库名称和版本(经常有人在MS SQL server版问 MySQL)
       
       这样想帮你的人可以直接搭建和你相同的环境,并在给出方案前进行测试,避免文字描述理解上的误差。   
      

  5.   

    To 9楼:
    可是我这个问题不是个具体的问题,而是个抽象的问题。并且也不涉及任何的开发环境,也就是说用的是通用SQL语法。说白了,这是个语法层面的问题。
    至于表结构,我已经在前面说明了Table1(ID,a,a_Extra,b,c,d,e)
    我就拿百度音乐举个例子吧,假设表内容是(虚构的)
    ID  歌名   歌手    专辑名              歌词
    1  一辈子  无名  一辈子爱你      ……………………
    2  某首歌 某个人  某张专辑       ……………………
    3   朋友  周华健    朋友    ……一辈子一生情一杯酒……
    4  一辈子  佚名   我的专辑       ……………………
    5  我的歌  某人  我这一辈子      ……………………
    期待搜索sql("一辈子")返回的数据如下
    ID  歌名   歌手    专辑名              歌词
    1  一辈子  无名  一辈子爱你      ……………………
    4  一辈子  佚名   我的专辑       ……………………
    5  我的歌  某人  我这一辈子      ……………………
    3   朋友  周华健    朋友    ……一辈子一生情一杯酒……
    ID=1和ID=4由于满足条件一:rs(歌名)="一辈子"排在最前面
    ID=5由于满足条件二:rs(专辑)包含"一辈子"紧跟其后(同样满足本条件的ID=1由于去重而去除掉了)
    ID=3由于满足条件三:rs(歌词)包含"一辈子"跟在更后面
    而ID=2不符合任何一个条件,将不出现在返回数据里
      

  6.   

    自己找到答案了,一个词“union”,结贴