Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Регулярка для БД

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: Составьте пожалуйста...
goga5
Отправлено: 08 Апреля, 2012 - 21:09:21
Post Id


Новичок


Покинул форум
Сообщений всего: 63
Дата рег-ции: Июнь 2011  


Помог: 0 раз(а)




Здравствуйте!

Имеем мы следующий запрос к БД

CODE (SQL):
скопировать код в буфер обмена
  1. $row = $db->super_query ("SELECT COUNT(*) as count FROM post WHERE title = '$title'");


где title сравнивается с $title и получаем желаемый результат но, нам нужно до этого сравнения из title вырезать некоторые символы а именно эти

пример куска регулярки:
PHP:
скопировать код в буфер обмена
  1. preg_replace('#[\s\.\\\/\+№_\-\—\;\:,\!\{\}\)\(\«\»\%\[\]\|\"\&\'\*\·\@\=\#\$\^]+#i', '', $title);


как встроить регулярку в этот запрос чтобы получить то что нам нужно ?

Спасибо огромное за помощь!
 
 Top
DeepVarvar Супермодератор
Отправлено: 08 Апреля, 2012 - 22:06:11
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




Никак. Так и оставить на стороне пхп ту регулярку что есть.
 
 Top
goga5
Отправлено: 08 Апреля, 2012 - 22:21:46
Post Id


Новичок


Покинул форум
Сообщений всего: 63
Дата рег-ции: Июнь 2011  


Помог: 0 раз(а)




DeepVarvar пишет:
Никак. Так и оставить на стороне пхп ту регулярку что есть.

Это тоже устраивает но, у нас идет сравнение title = '$title' и мы уже получаем результат, как после запроса применить регулярку ?

например можно ли сделать так:

Запрос
CODE (SQL):
скопировать код в буфер обмена
  1. $row = $db->super_query ("SELECT COUNT(*) as count FROM post WHERE title'");


и ниже регулярку ? если да, то как получить с запроса данные "title" ? опять переменной $title ? в переменной $title у нас другая информация и ее хотим сравнивать в БД с title, помогите пожалуйста....
 
 Top
DlTA
Отправлено: 08 Апреля, 2012 - 22:35:02
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2952
Дата рег-ции: Окт. 2010  


Помог: 53 раз(а)




goga5 пишет:
SELECT COUNT(*) as count FROM post WHERE title = '$title'

и как только база не ложится от таких запросов,
это же посимвольное сравнение, да еще и всей базы, хорошо если есть индекс на поле.

а по вопрос, можете на словах объяснить че вам надо, а то в примерах какая то муть получается
 
 Top
goga5
Отправлено: 08 Апреля, 2012 - 22:53:47
Post Id


Новичок


Покинул форум
Сообщений всего: 63
Дата рег-ции: Июнь 2011  


Помог: 0 раз(а)




DlTA пишет:
DlTA


База большая и не ложится, запрос выполняется при добавления новостей, сравнивается с базы title с формой добавлением новостей $title и это нужно делать без всяких пробелов и символов.

(Отредактировано автором: 08 Апреля, 2012 - 22:54:51)

 
 Top
Мелкий Супермодератор
Отправлено: 09 Апреля, 2012 - 09:38:35
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




DlTA пишет:
и как только база не ложится от таких запросов,

А чему там ложиться? Если индекс есть, будет лишь немногим медленнее числового поля. Тупо из-за большего объёма индекса.

goga5, воткните поле "filtered_title" и запишите туда соответствующий title после вашей регулярки. Потом по нему и ищите. Вот регекспом медленно искать совпадения (+ индекс использоваться не будет), да и что-то вижу только проверку на соответствие регулярке.


-----
PostgreSQL DBA
 
 Top
goga5
Отправлено: 09 Апреля, 2012 - 11:46:00
Post Id


Новичок


Покинул форум
Сообщений всего: 63
Дата рег-ции: Июнь 2011  


Помог: 0 раз(а)




Мелкий пишет:
воткните поле "filtered_title" и запишите туда соответствующий title после вашей регулярки.


Переменную $title, которая находится на странице в форме, я смогу ее воткнуть после регулярки, а вот поле с БД title как воткнуть после регулярки ? чтобы сравнивать после title с $title в очищенном виде на повтор ?
 
 Top
Мелкий Супермодератор
Отправлено: 09 Апреля, 2012 - 11:55:15
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Пройдите единоразово по всей таблице и заполните поле.


-----
PostgreSQL DBA
 
 Top
goga5
Отправлено: 09 Апреля, 2012 - 19:45:59
Post Id


Новичок


Покинул форум
Сообщений всего: 63
Дата рег-ции: Июнь 2011  


Помог: 0 раз(а)




Чтото у меня ничего не получается, помогите пожалуйста.
Вот рабочий на данный момент весь код:

PHP:
скопировать код в буфер обмена
  1. $row = $db->super_query ("SELECT COUNT(*) as count FROM _post WHERE title = '$title'");
  2. if ($row['count']) $stop .= "Повтор публикации новостей!";


Мне нужно очистить все пробелы и символы от текста, которая находится в переменной $title и в БД поле title и после чего уже сравнивать, потому, что если в переменной $title ($title - это в форме добавления новости на странице) при публикации добавляют один пробел или точку то новость публикуется на сайт и не смотря на то, что слова идентичны, как быть с переменной $title я знаю, это будет выглядеть так:

PHP:
скопировать код в буфер обмена
  1. $titles = $title;
  2. $titles = preg_replace('#[\s\.\\\/\+№_\-\—\;\:,\!\{\}\)\(\«\»\%\[\]\|\"\&\'\*\·\@\=\#\$\^]+#i', '', $titles);
  3. $row = $db->super_query ("SELECT COUNT(*) as count FROM _post WHERE title = '$titles'");
  4. if ($row['count']) $stop .= "Повтор публикации новостей!";


а вот как мне быть с полем БД title ? если у нас переменная $titles очищен, тогда также нужно будет очистить и его.

Помогите пожалуйста, я не программист, напишите кусочек кода если можно Улыбка
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Напишите за меня, пожалуйста »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB