![]() |
Сложный поиск в бд
Народ, появилась проблема,
есть две таблицы и нужно сравнить несколько полей на предмет совпадений, задача нетривиальная, но вот в чем проблема: скажем есть поле model и в нем данные : 280XL, 280 XL, 280-XL, XL 280, а в другой таблице для model: 280xL, так вот, если посмотреть, то в первой таблице записаны одни и теже данные только по разному, с пробелом, без, с тире, задом наперед, возможно ли произвести поиск, чтоб вернуть все результаты? P.S. используется MySQL и PHP |
В PHP есть множество строковых функций которые возвращают схожесть по таким признакам как звучание. Аналог такой функции в MySql - SOUNDEX(str)
Цитата:
|
Логичней пройтись по всем записям в базе и нормализовать (привести к общему виду) их, используя некую эвристику. Саундэкс xl-280 и 280-xl _всегда_ буде разным. То бишь перестановки влияют на саундэкс очень сильно, поэтому это не очень хороший метод, как мне кажется.
|
мне как-то (на postgresql) приходилось делать нечто подобное. Но там большой выбор строковых функций и регекспов. На мой вкус ivank совершенно прав - проще все привести в порядок один раз + сделать программный фильтр-поправлялку на ввод данных на будущее.
|
Я всё же перенесу тему, хоть и не совсем это "вебмастеру" а, скорее, "web-программирование".
|
На правах оправдания :). Конечно, порядок - хорошо вельми. Я ориентировался на "сравнить". Это понятие, имхо, не включает наведение порядка, относящееся скорее к организации процесса сравнения.
|
Prisoner
так порядок наводить-то как? как раз предложенным тобой способом :) |
Время: 22:42. |
Время: 22:42.
© OSzone.net 2001-