Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Проблема с поиском

860
26 сентября 2006 года
Abell2000
138 / / 15.01.2003
Народ, появилась проблема,
есть две таблицы и нужно сравнить несколько полей на предмет совпадений, задача нетривиальная, но вот в чем проблема:
скажем есть поле model и в нем данные : 280XL, 280 XL, 280-XL, XL 280,
а в другой таблице для model: 280xL, так вот, если посмотреть, то в первой таблице записаны одни и теже данные только поразному, с пробелом, без, с тире, задом наперед, возможно ли произвести поиск, чтоб вернуть все результаты?
385
26 сентября 2006 года
SomewherSomehow
477 / / 25.07.2004
возможно.
860
26 сентября 2006 года
Abell2000
138 / / 15.01.2003
[QUOTE=SomewherSomehow]возможно.[/QUOTE]
Потрясающий ответ
Извеняюсь за нахальство, а каким образом это сделать?
385
27 сентября 2006 года
SomewherSomehow
477 / / 25.07.2004
Каков вопрос, таков ответ. Спрашивалось возможно? Да возможно. А способов много. Ты же ничего не указал ни БД, ни как с ней работаешь...о какой конкретике может идти речь?
Я бы сделал с помощью хр. процедур, написал бы user function которая сравнивает две строки. Потом в запросе использовал бы ее. Или если бы работал например с базой вроде акцесса, то вынес бы сравнения в клиентский код...
19K
27 сентября 2006 года
macr_os
6 / / 22.09.2006
если только для того чтобы выбрать
тогда может так попробовать:
select into #temp
from Table1
where (нужное поле) in (280XL, 280 XL, 280-XL, XL 280)
860
27 сентября 2006 года
Abell2000
138 / / 15.01.2003
Да, это я погорячился не указав более подробную информацию, и так,
это MySQL+PHP, данные в примере лишь для объяснения задачи так что вариант macr_os не пройдет.
Еслиб нужно было бы сделать поиск по одному вводимому юзером полю, то я бы мог написать функцию анлизирующую ввод и создающую подходящий запрос, но проблема в том что есть две таблицы (в одной 30000 записей в другой меньше, но она постоянно растет) поиск идет по нескольким полям, т.е. 3 поля из одной должны совпадать с 3 соответствующими полями из другой. Можно брать построчно данные из одной таблицы анализировать данные и делать подходящий поиск в другой таблице, но я думаю вы понимаете, что такой вариант не приемлим, т.к. это займет вечность и превысит тайм аут для скрипта, следовательно, все должно работать только через sql.
385
28 сентября 2006 года
SomewherSomehow
477 / / 25.07.2004
В таком случае используй вариант с хр. процедурой и функцией. Идея простая, пишешь функцию в которую передаются две строки, в ней эти строки разбираешь на части, получается два множества, множество частей первой строки и соответсвенно второй, потом берешь их пересечение, ну и в зависимости от того какая нужна точность даешь результат - либо одно множество полностью входит в другое, либо наоборот, либо достаточно чтобы вес множества пересечения составлял какой-то процент от веса одного из множеств..короче вариантов много...и соответсвенно потом в хр. процедуре пишешь что-то вроде
 
Код:
select *
from
  t1,
  t2
where
  uf_compare_str(t1.field1,t2.field1) = 'Y' and
  uf_compare_str(t1.field2,t2.field3) = 'Y'
.....

Что именно и как нужно я не знаю, но думаю идея в целом понятна...
385
28 сентября 2006 года
SomewherSomehow
477 / / 25.07.2004
Еще как вариант можно в функции считать статистики букофф, в строках, а потом их сравнивать..
Еще как вариант можно попробовать стандартные функции нечеткого поиска типа soundex, difference, только не знаю есть ли такие в mysql.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог