Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Компьютеры + Интернет » Вебмастеру » Сложный поиск в бд

Ответить
Настройки темы
Сложный поиск в бд

Новый участник


Сообщения: 44
Благодарности: 0

Профиль | Отправить PM | Цитировать


Народ, появилась проблема,
есть две таблицы и нужно сравнить несколько полей на предмет совпадений, задача нетривиальная, но вот в чем проблема:
скажем есть поле model и в нем данные : 280XL, 280 XL, 280-XL, XL 280,
а в другой таблице для model: 280xL, так вот, если посмотреть, то в первой таблице записаны одни и теже данные только по разному, с пробелом, без, с тире, задом наперед, возможно ли произвести поиск, чтоб вернуть все результаты?

P.S. используется MySQL и PHP

Отправлено: 10:48, 26-09-2006

 

Аватара для Prisoner

Engrossed by the Void


Сообщения: 2229
Благодарности: 60

Профиль | Отправить PM | Цитировать


В PHP есть множество строковых функций которые возвращают схожесть по таким признакам как звучание. Аналог такой функции в MySql - SOUNDEX(str)
Цитата:
SOUNDEX(str)
Возвращает саундекс от str. Soundex - ``идентификатор звучания строки''. Словосочетания ``К скалам бурым'' и ``С каламбуроми'' должны давать одинаковый саундекс, т.к. на слух они звучат одинаково. Заметим, однако, что этой функции для русского языка не существует. MySQL нуждается в ней, и если кто-то может предоставить алгоритм саундекса на русском языке - свяжитесь с нами. - Прим. переводчика. Две созвучные строки, создающие впечатление почти одинаковых, могут иметь идентичные саундексы. Обычно стандартная саундекс-строка имеет длину 4 символа, но функция SOUNDEX() возвращает строку произвольной длины. Можно использовать функцию SUBSTRING() для извлечения стандартного саундекса строки из результата функции SOUNDEX(). В строке str игнорируются все символы, не являющиеся буквами или цифрами. Все международные буквенные символы, не входящие в диапазон A-Z, трактуются как гласные:
Код: Выделить весь код
mysql> SELECT SOUNDEX('Hello');
        -> 'H400'

mysql> SELECT SOUNDEX('Quadratically');
        -> 'Q36324'
Кстати, если Вам необходима функция и для русских слов, то не стоит сразу отметать это способ, справьтесь, возможно, что поддержку русского языка уже добавили.

-------
Не могу дать более дельный совет - не хватает системных ресурсов...

Это сообщение посчитали полезным следующие участники:

Отправлено: 11:58, 26-09-2006 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


редкий гость


Сообщения: 1696
Благодарности: 44

Профиль | Сайт | Отправить PM | Цитировать


Логичней пройтись по всем записям в базе и нормализовать (привести к общему виду) их, используя некую эвристику. Саундэкс xl-280 и 280-xl _всегда_ буде разным. То бишь перестановки влияют на саундэкс очень сильно, поэтому это не очень хороший метод, как мне кажется.

-------
http://ivank.ru


Отправлено: 16:45, 26-09-2006 | #3

mar mar вне форума

Аватара для mar

just mar


Moderator


Сообщения: 3904
Благодарности: 163

Профиль | Отправить PM | Цитировать


мне как-то (на postgresql) приходилось делать нечто подобное. Но там большой выбор строковых функций и регекспов. На мой вкус ivank совершенно прав - проще все привести в порядок один раз + сделать программный фильтр-поправлялку на ввод данных на будущее.

Отправлено: 18:47, 26-09-2006 | #4


Аватара для hasherfrog

Старый параноик


Сообщения: 2423
Благодарности: 85

Профиль | Отправить PM | Цитировать


Я всё же перенесу тему, хоть и не совсем это "вебмастеру" а, скорее, "web-программирование".

Отправлено: 19:08, 26-09-2006 | #5


Аватара для Prisoner

Engrossed by the Void


Сообщения: 2229
Благодарности: 60

Профиль | Отправить PM | Цитировать


На правах оправдания . Конечно, порядок - хорошо вельми. Я ориентировался на "сравнить". Это понятие, имхо, не включает наведение порядка, относящееся скорее к организации процесса сравнения.

-------
Не могу дать более дельный совет - не хватает системных ресурсов...


Отправлено: 11:03, 27-09-2006 | #6

mar mar вне форума

Аватара для mar

just mar


Moderator


Сообщения: 3904
Благодарности: 163

Профиль | Отправить PM | Цитировать


Prisoner
так порядок наводить-то как? как раз предложенным тобой способом

Отправлено: 12:39, 27-09-2006 | #7



Компьютерный форум OSzone.net » Компьютеры + Интернет » Вебмастеру » Сложный поиск в бд

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
HDD - Материнка и жесткий диск... Сложный вопрос выбора... darya-auto Накопители (SSD, HDD, USB Flash) 9 20-05-2008 15:13
[решено] Как сделать скриншот? Сложный компьютер... Werewolf6 Microsoft Windows 95/98/Me (архив) 5 28-06-2007 10:44
очень сложный вопрос по js E-mail Вебмастеру 10 05-03-2005 23:36
Поиск в IE Guest Хочу все знать 21 03-03-2004 09:52




 
Переход