匿名用户
1级
2019-02-16 回答
MYSQL 没用过, 所以语法不熟悉。可以给你提供思路。
把*替换成全部字段,然后增加字段“备注”,当TITLE包含“我们”并且包含“他们”时,字段内容为“A”,当TITLE包含“我们”或者“他们”时,字段内容为“B”,然后ORDER BY “备注”
不过你这个WHERE条件写的很是诡异啊。
刚查的资料,也许可以写成如下:
SELECT 字段A,字段B,……,(case when ( 'title' like '%我们%' and 'title' like '%他们%' ) then 'A' when ( 'title' like '%我们%' OR 'title' like '%他们%' ) then 'B' else 'C' end ) as '备注' FROM text where (`title` like '%我们%' and `title` like '%他们%') or (`title` like '%我们%' or `title` like '%他们%') limit 6
追问:
我就想先2个关键字完全匹配 如果不够6条在模糊匹配啊。
如果你觉得这个效率低,帮写点效率高的也好呀。
mysql 跟其他sql差不多的吧 写下看看呀。 谢谢了!
追答:
limit 6 不是限制只显示6条么?和你说的要求好像不一样啊
上面少写了个ORDER BY '备注'
哦,我明白你的意思了,你可以把'title' like '%我们%' and 'title' like '%他们%' 都换成 'title' like '%我们%他们%',这样起码表达的意思能清晰些。
追问:
本来我是写的2句 判断条件1是否满足6条如果没有在写一句SQL语句匹配后面剩余的 看了你上面那么个长有点恐惧啊 case when也不知为何。 还有字段A 和B ? 这个条件都只在title字段进行查询的。。
这别人帮写的
SELECT * FROM text where (`title` like '%我们%' and `title` like '%他们%') union all SELECT * FROM text where (`title` like '%我们%' or `title` like '%他们%')
我想这么查询效率是不是写2句SQL差不多?
追答:
上面的语句和你原来的语句没有太大区别,只是把*的内容展开了,换成全部字段,然后CASE WHEN语句是将条件转换成'备注'字段的内容,用来方便排序的。
UNION ALL的语句会有重复数据,比如'title'的内容为'我们和他们',这样数据行,会同时出现两次,估计与你实际要求不符。
追问:
你这么一说我也想到了我写2句sql一样可能会出现重复看来写一句才能满足需求,我先试下你写的。
追答:
实际上的运行结果,只是比你原来的查询多出一个'备注'字段,这个字段里面只有A和B,A的都是'%我们%他们%',B的都是'%我们%'或'%他们%'