匿名用户

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的都是'%我们%'或'%他们%'