gpt4 book ai didi

mysql - 转义 % 登录子查询

转载 作者:行者123 更新时间:2023-11-29 04:28:12 30 4
gpt4 key购买 nike

我在 mySQL 中有一个查询,旨在返回我们网站上使用的搜索词。是的,这是一个标签云,是的,我知道它是一条鲻鱼 :)

我们有一个管理页面,管理员可以在其中查看搜索词并选择将它们排除在云端之外。这些词进入“badWords”表。我们得到了一些术语,例如“foo%2525252525252520bar”,但我们很难将它们排除在外。

在伪代码中,获取云的搜索词的查询是:

SELECT * FROM `searchTerms` WHERE `word` NOT IN ( SELECT `word` FROM `badWords` )

这工作正常,除非从子查询返回的其中一个术语中有一个 %。有没有办法逃避整个子查询?我试过做一个

replace( SELECT `word` FROM `badWords`, '%', '\%' )

...但这显然在句法上不正确。

如果需要,我可以做两个查询,但想知道是否有办法按原样完成。

谢谢!

==============================

更新:暂时关闭它,因为我认为错误出在其他地方。一旦我确定会报告,但不希望人们浪费时间在这里回答问题,如果它不是正确的问题...

对目前收到的两个回复都投了赞成票。谢谢,伙计们。

==============================

更新 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`
);

祝你好运!

关于mysql - 转义 % 登录子查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7181762/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com