求SQL语句。(100分)

  • 主题发起人 主题发起人 3h
  • 开始时间 开始时间
3

3h

Unregistered / Unconfirmed
GUEST, unregistred user!
求一SQL语句或者相同作用的结构与过程,数据库是使用大富翁的离线库。
我想在搜索的过程中,以下:
select * from letters where
subject like '%mysql%' or content like '%mysql%'
这样会搜到所有符合条件的贴子,其实很多贴子前面的贴子(同一主页即同parent)
有相关的内容。这样就不必再提出此贴子了,再进一步说,如果某一问题ID为5,
它跟有10条贴子,即这10条的parent均为10,在搜索时它们都有'mysql'这一子句,
实际上我们只要搜索到第一条带有此子句的贴子,后面再跟的贴子就不必再搜索了,
如果主题贴子中有此子句,后面跟的所有贴子都不必再搜索了。
上面提到的那个语句效率太低必须查找所有贴子。
现求。
 
我不知道大富翁的贴子是如何存储的.
(我想问题和答复分两个表比较好);
如果是在一个表中的话:
select * from letters a
where a.parent=0 // 贴子是问题
and ( (a.subject like "%mytext%" or a.content like "%mytext")
or exist( select * from letters b
where b.parent=a.id and
(b.subject like "%mytext%" or b.content like "%mytext%))
以上语句返回所有问题中有'mytext'或答复中又'mytext'的问题, 只返回问题!
形成一个主题的列表.不过它的效率并不高, 因为这个问题本身比你的问题复杂

 
select top 1 * from letters wheresubject like '%mysql%' or content like '%mysql%'
可以吗.
 
张国龙, let me try.
g622, "top 1"? what is that?
 
top 1 :只返回所有记录中的第一个。
 
top 1 即使语法上通过,也解决不了问题。因为它只能返回一条满足条件的纪录
select * from letters where (parentid=0 and subject like '%yoursql%'
or content like '%yoursql%') or (parentid<>0 and parentid not in
(select parentid from letters where subject like '%yoursql%'
or content like '%yoursql%') and subject like '%yoursql%'
or content like '%yoursql%')
返回所有满足要求的主贴,和那些满足要求但是主贴不满足要求的所有子贴
效率的高低要看数据库对它的解释
1、对非相关子查询是否只执行一次.此例中的select parentid from letters
where subject like '%yoursql%' or content like '%yoursql%'是非相关
子查询
2、对and 和 or 的执行过程是否优化.
在oracle上,我相信效率还可以
 
库结构有问题, 你这样设计肯定需要对表进行全表扫描, 而且可能是多次
 
多人接受答案了。
 
后退
顶部