我在 mySQL 中有一个查询,旨在返回我们网站上使用的搜索词。是的,这是一个标签云,是的,我知道它是一条鲻鱼 :)
我们有一个管理页面,管理员可以在其中查看搜索词并选择将它们排除在云端之外。这些词进入“badWords”表。我们得到了一些术语,例如“foo%2525252525252520bar”,但我们很难将它们排除在外。
在伪代码中,获取云的搜索词的查询是:
SELECT * FROM `searchTerms` WHERE `word` NOT IN ( SELECT `word` FROM `badWords` )
这工作正常,除非从子查询返回的其中一个术语中有一个 %。有没有办法逃避整个子查询?我试过做一个
replace( SELECT `word` FROM `badWords`, '%', '\%' )
...但这显然在句法上不正确。
如果需要,我可以做两个查询,但想知道是否有办法按原样完成。
Cảm ơn!
==============================
更新:暂时关闭它,因为我认为错误出在其他地方。一旦我确定会报告,但不希望人们浪费时间在这里回答问题,如果它不是正确的问题...
对目前收到的两个回复都投了赞成票。谢谢,伙计们。
==============================
更新 2:叹息没关系...无法关闭它:\
==============================
最终更新:好吧,看起来转义值不是问题。管理页面在添加到 badWords 表之前传递 URL 中的值。在通过 URL 传递值时,它发生了变化。所以添加到 badWords 的实际上是“foo%25252525252520bar”(少了一个“25”序列)。如果我手动更新 badWords 中的值并添加回丢失的“25”,它会按预期工作。所以不需要替换或逃避任何东西。我只需要正确修复这些 URL 值。
==============================
我不认为 %
是您的问题。我认为您正尝试在子查询本身 (SELECT ...
) 上使用 REPLACE()
,而不是在列值 (word
)。试试这个:
SELECT * FROM `searchTerms`
WHERE `word` NOT IN (
SELECT REPLACE(`word`, '%', '\%') AS word FROM `badWords`
);
祝你好运!
Tôi là một lập trình viên xuất sắc, rất giỏi!