вывод один, механизмы поиска в обоих случаях должны быть разные.
Для поиска в полне подойду регулярки, а для второго придётся использовать чтото другое.
Для того чтобы подстроки не совпадали и используются символы ^$ начала и конца строки
Тоесть обработчик должен искать с ними, а поисковик без, или как я писал припомощи LIKE %s0%
Тогда поисковик будет находить и s0 и s2 (где s0 подстрока в s2)
а обработчик не будет, так как ^s0$ будут этого н допускать
16. valenok - 28 Июня, 2007 - 11:59:46 - перейти к сообщению
17. EuGen - 28 Июня, 2007 - 12:46:00 - перейти к сообщению
Цитата:
Для поиска в полне подойду регулярки, а для второго придётся использовать чтото другое.
Наверное, это "что то" и предстоит построить.
Я правильно понял, Вы предлагаете поисковику делать так: REGEXP не по T.REG а по f(T.REG), где f - возвращает T.REG с отрезанными ^ и $ (если таковые имеются на концах),
А обработчику - по оригинальному значению T.REG ... ?
18. valenok - 28 Июня, 2007 - 14:37:13 - перейти к сообщению
в принципе да.
Но лучше наоборот.
тоесть T.REG в оригинале будет без этих двух символов (^$)
Но лучше наоборот.
тоесть T.REG в оригинале будет без этих двух символов (^$)
19. EuGen - 28 Июня, 2007 - 14:58:16 - перейти к сообщению
Да я тоже так думал, но оказалось, что нельзя изменять уже существующие шаблоны.
Да и, если честно, я не очень понял как это поможет по вводу скажем st показывать поисковиком пресловутое выражение для "стан" ...
Да и, если честно, я не очень понял как это поможет по вводу скажем st показывать поисковиком пресловутое выражение для "стан" ...
20. valenok - 29 Июня, 2007 - 10:31:03 - перейти к сообщению
Слаба богу. Можете меня поздравить. Наконец то я понял что к чему.
--
тут выходит только один вариант.
Писать эту функцию создания регулярок из слов
Тогда получится вот так:
T.REG
id | reg
---------
1 | [c|c|S|s][t|T|T|т][a|а|А][n|н|Н]
2 | [c|c|S|s][t|T|T|т]
3 | [c|c|S|s][t|T|T|т][u|U|у|У][л|Л|l|L]
4 | [л|Л|l|L][и|И|i|I][c|c|S|s][t|T|T|т]
5 | [c|c|S|s][v|V|в|В][и|И|i|I][c|c|S|s][t|T|T|т]
поисковик по запросу строки sт должен будет создать регулярку [c|c|S|s][t|T|T|т]
и посредством следующего обратиться к базе:
SELECT `id` FROM `T` WHERE `REG` LIKE '%[c|c|S|s][t|T|T|т]%'
и будут найдены id - 1, 2, 3, 4, 5
так там везде присутствует подстрока ст
при этом есть одно НО. В базе всегда все буквы s должны соответствовать всегда одной регулярке [С|c|S|s]. тоесть если регулярка для буквы S будет не [С|с|S|s] а [С|S|c|s]
то работать не будет
скрипт проверяющий на уникальность будет проверять вот так:
SELECT `id` FROM `T` WHERE `REG` LIKE '[c|c|S|s][t|T|T|т]'
Дело осталось за самым интересным. Написать эту функцию..\n\n(Добавление)
даже не за самым интересным.
Просто пишем два массива $replacement & $pattern
в первый вводим буквы алфавита во второй регулярки на которые следует заменять буквы
--
тут выходит только один вариант.
Писать эту функцию создания регулярок из слов
Тогда получится вот так:
T.REG
id | reg
---------
1 | [c|c|S|s][t|T|T|т][a|а|А][n|н|Н]
2 | [c|c|S|s][t|T|T|т]
3 | [c|c|S|s][t|T|T|т][u|U|у|У][л|Л|l|L]
4 | [л|Л|l|L][и|И|i|I][c|c|S|s][t|T|T|т]
5 | [c|c|S|s][v|V|в|В][и|И|i|I][c|c|S|s][t|T|T|т]
поисковик по запросу строки sт должен будет создать регулярку [c|c|S|s][t|T|T|т]
и посредством следующего обратиться к базе:
SELECT `id` FROM `T` WHERE `REG` LIKE '%[c|c|S|s][t|T|T|т]%'
и будут найдены id - 1, 2, 3, 4, 5
так там везде присутствует подстрока ст
при этом есть одно НО. В базе всегда все буквы s должны соответствовать всегда одной регулярке [С|c|S|s]. тоесть если регулярка для буквы S будет не [С|с|S|s] а [С|S|c|s]
то работать не будет
скрипт проверяющий на уникальность будет проверять вот так:
SELECT `id` FROM `T` WHERE `REG` LIKE '[c|c|S|s][t|T|T|т]'
Дело осталось за самым интересным. Написать эту функцию..\n\n(Добавление)
даже не за самым интересным.
Просто пишем два массива $replacement & $pattern
в первый вводим буквы алфавита во второй регулярки на которые следует заменять буквы
Предварительно нужно наверное убедится что там не окажется всяких запятых, и прочих лишних символов.