能否在一个SQL语句中无重复且有次序的取出满足条件A或B的数据

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

各位达人有没有点子呢?
...全文
201 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
owen1759 2012-08-08
  • 打赏
  • 举报
回复
自己找到答案了,一个词“union”,结贴
owen1759 2012-08-08
  • 打赏
  • 举报
回复
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不符合任何一个条件,将不出现在返回数据里
ACMAIN_CHM 2012-08-08
  • 打赏
  • 举报
回复
(不要高估你的汉语表达能力或者我的汉语理解能力)
建议你列出你的表结构,并提供测试数据以及基于这些测试数据的所对应正确结果。
参考一下这个贴子的提问方式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)

这样想帮你的人可以直接搭建和你相同的环境,并在给出方案前进行测试,避免文字描述理解上的误差。

owen1759 2012-08-08
  • 打赏
  • 举报
回复
To 7楼:我不知道你在说什么哦?
GIS_Cloud 2012-08-07
  • 打赏
  • 举报
回复
看了下,你说的这个是分页哦,分页什么的太复杂了,每次只去50条记录,分页的写法很多,你所说的:取出符合条件一的数据、符合条件二的数据、符合条件三的数据,并且把符合条件一的排在最前面、符合条件二的紧接、最后是符合条件三的数据只是取出数据并且排序的逻辑而已。
owen1759 2012-08-07
  • 打赏
  • 举报
回复
你还没明白我的意思哦,关键不在于最后这个limit,而在于前面,前面要怎么写才能把符合要求的数据按符合要求的顺序取出来。
也就是说取出符合条件一的数据、符合条件二的数据、符合条件三的数据,并且把符合条件一的排在最前面、符合条件二的紧接、最后是符合条件三的数据(而不是把它们混合在一起按某字段排序),并且去除其中重复的数据。
rucypli 2012-08-07
  • 打赏
  • 举报
回复
没有多取啊 数据库是limit 900,50;
owen1759 2012-08-07
  • 打赏
  • 举报
回复
这样对于服务器的压力也太大了,一方面要从数据库中取出比原本需要的多几十几百倍的数据,一方面还有巨大的计算量,如果数据再多些,访问量再大些呢?一个pv产生100个pv的服务器压力和数据库压力,也太不值了吧?对于这种情况,在sql语句里就没有什么比较好的实现么?
rucypli 2012-08-07
  • 打赏
  • 举报
回复
为了第50页 确实需要把前1000条去重 排序
owen1759 2012-08-04
  • 打赏
  • 举报
回复
有没有人帮帮我?
owen1759 2012-08-03
  • 打赏
  • 举报
回复
一个典型的例子就是百度MP3搜索,你输入关键字后首先出现的是歌曲名称完全匹配的,接下来出现的是歌曲名、歌手名、专辑名模糊匹配的,翻到最末尾还能找到歌曲名、歌手名、专辑名都没匹配,但是歌词中出现了关键字的。总不能为了第50页的内容,把1000条数据进行一次程序的去重、排序吧~

56,679

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧