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]   

> Описание: Как корректно сравнить новые вносимые данны с существующими данными базы, дабы избежать дубликатов
Deonis
Отправлено: 17 Мая, 2010 - 17:26:58
Post Id



Посетитель


Покинул форум
Сообщений всего: 298
Дата рег-ции: Нояб. 2009  


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




Всем доброго времени суток!
Есть проблемка, может подскажете? Некоторые решения этой задачи на форуме видел, но полностью удовлетворяющих - увы нет.
Суть: в базе есть, ну скажем, наименование моделей оборудования, они могут состоять из одного, двух и более слов. Для того, чтобы не дублировались они я делаю проверку, может по тупому, но типа так:
PHP:
скопировать код в буфер обмена
  1.  
  2. $newBrand = $_POST['newBrand'];
  3. $res = mysql_query("SELECT * FROM Brands WHERE brandName LIKE '%$newBrand%' COLLATE cp1251_general_ci", $db);
  4.  

Но работает это не всегда корректно, т.к. для полной уверености мне необходимо поубирать пробелы, и не только в новом вносимом названии (newBrand), но и в названиях, уже находящихся в базе.
Например, в базе есть модель "ААА 12 34", вносимое новое название "ААА 1 23 4". Они идентичны просто ввели по другому. Как же их сравнить? Со вносимым все ясно - $newBrand = str_replace(" ", "", $newBrand); , но как быть с тем что в базе? Вытаскивать все наименования и прогонять их через do while - мне кажеться тупо. Если альтернативное решение?

(Отредактировано автором: 17 Мая, 2010 - 17:30:14)

 
 Top
Мелкий Супермодератор
Отправлено: 17 Мая, 2010 - 17:41:52
Post Id



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


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


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




Так же, но силами mysql. http://dev[dot]mysql[dot]com/doc/refman/[dot][dot][dot]g-functions[dot]html функция replace


-----
PostgreSQL DBA
 
 Top
JustUserR
Отправлено: 17 Мая, 2010 - 17:49:41
Post Id



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


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


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




Deonis пишет:
Например, в базе есть модель "ААА 12 34", вносимое новое название "ААА 1 23 4". Они идентичны просто ввели по другому. Как же их сравнить? Со вносимым все ясно - $newBrand = str_replace(" ", "", $newBrand); , но как быть с тем что в базе? Вытаскивать все наименования и прогонять их через do while - мне кажеться тупо. Если альтернативное решение?
То есть вам необходимо организовать проверку уже существующих значений в БД и при этом сравнивать их сразу без учета пробелов? В таком случае действительно выборка всех значений в PHP-скрипт и проверка циклом с регулярным выражением не будет эффективной - поскольку передача данных и БД и цикл занимает достаточно длительное время
Однако вы можете сделать свою SQL-функицю которая будет удалять пробелы из строк со стороны БД - о пользовательский функицях можеое посмотреть к примеру здесь http://foxclub[dot]ru/articles/art27.php Если вы используете БД Oracle то все еще проще - поскольку в эту СУБД встроен Java runtime и вы можете написать интересующую вас выборку и сортировку на Java


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Deonis
Отправлено: 17 Мая, 2010 - 18:21:12
Post Id



Посетитель


Покинул форум
Сообщений всего: 298
Дата рег-ции: Нояб. 2009  


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




JustUserR пишет:
Однако вы можете сделать свою SQL-функицю которая будет удалять пробелы из строк со стороны БД


Спасибо! Мне, как новичку это будет полезно. Хотя, всегда было стремновато подходить к написанию собственных функций. Учителя у меня нет, а самому... ощущение, что это дремучий лес Улыбка Ну, будем потихоньку въезжать. Если знаете, то может подскажете доступную для понимания статейку по самым азам написания функций?
 
 Top
JustUserR
Отправлено: 18 Мая, 2010 - 12:14:46
Post Id



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


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


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




Deonis пишет:
Спасибо! Мне, как новичку это будет полезно. Хотя, всегда было стремновато подходить к написанию собственных функций. Учителя у меня нет, а самому... ощущение, что это дремучий лес Ну, будем потихоньку въезжать. Если знаете, то может подскажете доступную для понимания статейку по самым азам написания функций?
Пожалуйста! Использование стратегии по переносу части работы с севвера приложений на сервер баз данных является эффективной стратегией - поскольку в сервере БД уже реализованы эффективные механизмы поиска и индексации и поэтому такую работу удобно переложить на него Нектороая информация по пользовательским SQL-функиям есть здесь http://www[dot]intuit[dot]ru/department/database/sql/11/ и здесь http://www[dot]databasebook[dot]ru/rabot[dot][dot][dot]i-funktsiy-[dot]html В вашем случае задача создать функцию удаления пробелов не такая уж и сложная - надо пройтись по строке посимвольно и копировать в новую строку непробельные символы - и потом по необходимости перевести в один регистр


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB