Проблемка с генерацией правильных УРЛов

Asar
На сайте с 23.08.2004
Offline
334
512

Имеется каталог, доступ к каждому элементу которого можно получить через путь вида:

site.ru/elements1/element-name/ (название элемента всегда из двух слов).

Имея такой УРЛ, заменяем в element-name дефис на пробел, делаем запрос к БД по этому названию и все Ок.

Теперь же появились элементы, у которых в втором слове есть дефис. В результате стандартная заменялка дефисов на пробелы работает не так, как нам нужно, и запрос к БД идет кривой.

Вопрос: что делать, как быть? Неужель придется все УРЛы менять на какие-нить там уродливые element_name вместо дефиса?

М
На сайте с 08.02.2006
Offline
59
#1

Либо урлы менять либо запрашивать в базе все возможные комбинации тире и пробелов:

"какой-то элемент"

"какой то элемент"

"какой-то-элемент"

"какой то-элемент"

Shtogrin
На сайте с 02.11.2006
Offline
95
#2

Заменяем дефис на ? и ищем LIKE. Если строк больше одной - значит в базе не однозначность, меняете название элемента

www.shtogrin.com (http://www.shtogrin.com/). Канцтовары (http://www.invit.com.ua/). 1С Бухгалтерия (http://account.kiev.ua/).
Asar
На сайте с 23.08.2004
Offline
334
#3

Магнат, Это уж совсем мрачно...

Shtogrin, Имелось ввиду нечно вроде этого:

'WHERE Capt LIKE "'.str_replace('-', '%', $element).'"'

?

Shtogrin
На сайте с 02.11.2006
Offline
95
#4

Asar, зачем '%', вам нужен один символ, поэтому '?'. Но тоже может получиться неоднозначный выбор.

Надо найти строки где вместо "-" может быть " " или "-", тогда REGEXP http://dev.mysql.com/doc/refman/5.1/en/regexp.html

Shtogrin
На сайте с 02.11.2006
Offline
95
#5

типа так, но с экранированием рег.выражений надо посмотреть

'WHERE Capt REGEXP "'.str_replace('-', '[ -]', $element).'"'

Asar
На сайте с 23.08.2004
Offline
334
#6

Хм, так если знак вопроса, вообще ошибка же полезет. Неоднозначного же здесь не будет...

Shtogrin
На сайте с 02.11.2006
Offline
95
#7

перепутал, никогда не пользовался, и все время считал что и в MySQL "?" - один символ, надо "_"


_ Matches exactly one character
% Matches any number of characters, even zero characters

С "%" может быть очень много вариантов, поэтому лучше все же "_"

Asar
На сайте с 23.08.2004
Offline
334
#8

А, блин. А я тормоз вообще ? туда приделал по досовской привычке. Все, дошло. Сенкс.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий