Выход из% входа в подзапрос - PullRequest
1 голос
/ 25 августа 2011

У меня есть запрос в mySQL, который предназначен для возврата поисковых терминов, которые используются на нашем сайте.Да, это для облака тегов, и да, я знаю, что это кефаль :):

У нас есть страница администратора, где администраторы могут просматривать условия поиска и исключать их из показа в облаке.Эти слова попадают в таблицу "badWords".Мы получили некоторые термины, такие как «foo% 25252525252520bar», и у нас возникают проблемы с их исключением.

В псевдокоде запрос для получения поисковых терминов для облака:

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

Это работает нормально, если только в одном из условий, возвращаемых из подзапроса, нет%.Есть ли способ избежать всего подзапроса?Я пытался сделать

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

... но это, по-видимому, не синтаксически правильно.

Я могу сделать два запроса, если это необходимо, но подумал, есть ли способ сделать этокак есть.

Спасибо!

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

ОБНОВЛЕНИЕ: пока закрываем, так как я думаю, что ошибка находится в другом месте.Отзовитесь, как только я точно узнаю, но не хочу, чтобы люди тратили время на ответы на вопрос здесь, если это не правильный вопрос ...

Проголосовали оба ответа, полученных до сих пор.Спасибо, ребята.

==================================== *

ОБНОВЛЕНИЕ 2: вздох Бессмысленно ... не могу закрыть его: \

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

ЗАКЛЮЧИТЕЛЬНОЕ ОБНОВЛЕНИЕ: похоже, выход из значения - не проблема.Страница администратора передает значение в URL, прежде чем оно будет добавлено в таблицу badWords.При передаче значения через URL оно изменяется.То, что добавлено в badWords, это на самом деле "foo% 25252525252520bar" (есть на одну последовательность меньше "25").Если я вручную обновлю значение в badWords и добавлю обратно пропущенное «25», оно будет работать как положено.Так что не нужно ничего заменять или убегать.Мне просто нужно правильно исправить эти значения URL.

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

Ответы [ 2 ]

3 голосов
/ 25 августа 2011

Я не думаю, что % это ваша проблема здесь.Я думаю, что вы пытаетесь использовать REPLACE() для самого подзапроса (SELECT ...), а не для значения столбца (word).Попробуйте вместо этого:

SELECT * FROM `searchTerms`
 WHERE `word` NOT IN (
   SELECT REPLACE(`word`, '%', '\%') AS word FROM `badWords`
 );

Удачи!

2 голосов
/ 25 августа 2011

Я не очень хорошо разбираюсь в синтаксисе MySQL, но SQL Server позволяет вам делать это так:

SELECT * FROM `searchTerms` WHERE `word` NOT IN ( SELECT REPLACE(`word`, '%', '\%') FROM `badWords` ) 

ПРИМЕЧАНИЕ: По сути, все, что я сделал, это переместил ваш REPLACE на какое-то =) Надеюсь, это поможет.

...