这种奇葩的写法果然是不行吗

2015-04-09 09:30:03 +08:00
 Conte

SELECT id FROM xxxxx where carrierId = 2 AND (('%'+postName+'%') LIKE '漳浦盘陀' OR ('%'+postName1+'%') LIKE ' [漳浦盘陀邮政支局] 已收寄' OR ('%'+postName2+'%') LIKE ' [漳浦盘陀邮政支局] 已收寄') AND is_delete = 0

3504 次点击
所在节点    编程
6 条回复
wanjingjjj
2015-04-09 11:02:35 +08:00
这写法真是太奇葩了,为什么这么写
zhujinliang
2015-04-09 11:34:01 +08:00
把LIKE左右两边对调一下试试呢

SELECT id FROM xxxxx where carrierId = 2 AND ('漳浦盘陀' LIKE ('%'+postName+'%') OR ' [漳浦盘陀邮政支局] 已收寄' LIKE ('%'+postName1+'%') OR ' [漳浦盘陀邮政支局] 已收寄' LIKE ('%'+postName2+'%')) AND is_delete = 0

再不行试试INSTR之类的函数
wanjingjjj
2015-04-09 13:18:27 +08:00
应该这么写吧 postName like '%漳浦盘陀%'
justfindu
2015-04-09 13:25:39 +08:00
是因为%加错地方了吧
Conte
2015-04-10 12:08:20 +08:00
@wanjingjjj
@zhujinliang
@wanjingjjj
@justfindu

写后面肯定是可以的~
我的意思是想要模糊匹配的关系是:传递进来的数据(漳浦盘陀、漳浦盘陀邮政支局等)包含数据库中相应字段的信息(postName,postName1,postName2等),可以理解为模糊匹配的一个反转?
只是试了一下这么奇葩的写法。
实际绕过了,把数据查出来然后再模糊匹配。
solaro
2015-05-08 21:57:03 +08:00
三个like。。醉了。碰到这种情况,我会把他拆分成
SELECT id
FROM xxxxx
WHERE carrierId = 2
AND is_delete = 0
AND (('%'+postName+'%')
LIKE '漳浦盘陀'

SELECT id
FROM xxxxx
WHERE carrierId = 2
AND is_delete = 0
AND ('%'+postName1+'%') LIKE ' [漳浦盘陀邮政支局] 已收寄'

SELECT id
FROM xxxxx
WHERE carrierId = 2
AND is_delete = 0
AND ('%'+postName2+'%') LIKE ' [漳浦盘陀邮政支局] 已收寄')

三个QUERY,在php里处理数据。快多了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/182497

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX