Задавайте вопросы, мы ответим
Вы не зашли.
Здравствуйте!
Имеем мы следующий запрос к БД
Неактивен
Здравствуйте.
В mysql ддстаточно скудный механизм regexp и он не позволяет производить замены, только поиск на соответствие.
Так что лучше сперва на клиенте из $title средствами php вырежьте ненужное тем же preg_replace'ом, и уже модифицированный $titlle подставляйте в запрос.
Неактивен
deadka написал:
Здравствуйте.
В mysql ддстаточно скудный механизм regexp и он не позволяет производить замены, только поиск на соответствие.
Так что лучше сперва на клиенте из $title средствами php вырежьте ненужное тем же preg_replace'ом, и уже модифицированный $titlle подставляйте в запрос.
Дело в том, что в БД мы имеем поле title и мне нужно с него вырезать эти символы а так-же вырезать с переменной $title, делаем проверка на повтор, вырезать в переменной $title я знаю как но с базы, которая проверяет все поля title - не знаю как
Помогите пожалуйста, как мне это сделать ?
Отредактированно gergia (08.04.2012 23:56:24)
Неактивен
С базы поможет вырезать функция, например replace.
Только осторожно это делайте, и обязательно снимите бэкап с таблицы, на всякий случай.
То есть должна быть комбинация запросов примерно таких:
Неактивен
deadka написал:
С базы поможет вырезать функция, например replace.
Только осторожно это делайте, и обязательно снимите бэкап с таблицы, на всякий случай.
То есть должна быть комбинация запросов примерно таких:UPDATE `post` SET `title` = replace(`title`, '\%', '');
Или проще сделать так - в цикле на клиенте выбираете записи по одной, приводите title в порядок средствами php - и обновляете запись, заменив кривой title на правильный.
Вы не так меня поняли или я не так объяснил, с самой базы вырезать ничего не нужно, происходит проверка на повтор, мы берем с БД поле title - чистим его от всех символов - потом берем со страницы с формы $title - его тоже чистим от всех символов - после сравниваем друг с другом и если у нас совпадение 1:1 то выдаем просто ошибку - "Повтор!"......
Неактивен
То есть Вам необходимо хранить в базе title со всем этим мусором попутным?
В таком случае я бы рекомендовал все же либо делать проверку на клиенте либо (чего не рекомендую) как-то так:
SELECT COUNT(*) as count FROM post WHERE replace(replace(replace( ... (title, '\%', ''), '\\', '') ...) = '$title'"
при том, что $title уже почищен на клиенте или придётся его также оборачивать в эту гору replace'ов ).
Есть еще вариант - написать mysql-функцию my_cleaning_function (см. create function), которая почистит строку входную от мусора.
Тогда можно было бы так:
SELECT COUNT(*) as count FROM post WHERE my_cleaning_function(title) = my_cleaning_function('$title')
Неактивен
Спасибо deadka!, буду смотреть mysql-функцию my_cleaning_function, если будут еще варианты, пишите пожалуйста.
Неактивен
Ээмм, я, видимо плохо выразился.
функция my_cleaning_function - это Вы должны ее написать :-).
Пример создания функций mysql Вы можете посмотреть здесь. Ну и документацию смотрите, там достаточно подробно.
Неактивен
Чтото у меня ничего не получается, помогите пожалуйста.
Вот рабочий на данный момент весь код:
Неактивен
Ок, вот примерный набросок функции:
Неактивен