我在mySQL中有一个查询,它意味着返回我们网站上使用的搜索词。是的,这是一个标签云,是的,我知道它是一个m鱼:)
我们有一个管理页面,管理员可以在其中查看搜索字词,并选择将其排除在云端显示。这些单词进入“badWords”表。我们已经得到了一些像“foo%2525252525252520bar”这样的术语,但是我们在排除这些术语时遇到了麻烦。
在伪代码中,获取云搜索条件的查询是:
SELECT * FROM `searchTerms` WHERE `word` NOT IN ( SELECT `word` FROM `badWords` )
这样可以正常工作,除非从子查询返回的其中一个术语中包含%。有没有办法逃脱整个子查询?我试过做了
replace( SELECT `word` FROM `badWords`, '%', '\%' )
...但这显然在语法上不正确。
如果需要,我可以做两个查询,但想知道是否有办法按原样完成。
谢谢!
==============================
更新:现在关闭它,因为我认为错误在其他地方。一旦我知道肯定会报告回来,但是如果这不是正确的问题,请不要浪费时间回答这里的问题......
对迄今收到的两份回复进行了上调。谢谢,伙计们。
==============================
更新2:叹息没关系......无法关闭它:\
==============================
最终更新:好吧,看起来逃避价值不是问题。管理页面在将URL添加到badWords表之前传递URL中的值。在通过URL传递值时,它会发生变化。所以添加到badWords的实际上是“foo%25252525252520bar”(少了一个“25”序列)。如果我手动更新badWords中的值并添加缺少的“25”,它将按预期工作。所以不需要更换或逃脱任何东西。我只需要正确修复这些URL值。
==============================
答案 0 :(得分:3)
我认为%
不是你的问题。我认为您尝试在子查询本身(REPLACE()
)上使用SELECT ...
,而不是在列值(word
)上使用SELECT * FROM `searchTerms`
WHERE `word` NOT IN (
SELECT REPLACE(`word`, '%', '\%') AS word FROM `badWords`
);
。试试这个:
{{1}}祝你好运!
答案 1 :(得分:2)
我对MySQL语法不是很了解,但SQL Server允许你这样做:
SELECT * FROM `searchTerms` WHERE `word` NOT IN ( SELECT REPLACE(`word`, '%', '\%') FROM `badWords` )
注意:基本上我所做的就是将REPLACE
移到某些地方=)希望这会有所帮助。