PHP + MySQL: поиск с использованием подстановочных знаков - PullRequest
1 голос
/ 13 декабря 2008

Итак, у меня есть следующие строки в БД:

1 | / Пользователей /

2 | / Пользователей / админ /

3 | / Пользователей / администратора / *

4 | / Пользователей / администратор / микрофон /

5 | / пользователей / администратора / стив / документы /

Входной URL-адрес / users / admin / steve / , и цель состоит в том, чтобы найти совпадение URL-адреса в БД.

Я хочу вернуть # 3 в качестве правильной строки, поскольку подстановочный знак "*" указывает, что вместо звездочки может идти все что угодно. Какой самый эффективный способ сделать это?

Вот мои первоначальные мысли, но я уверен, что они могут быть улучшены:

  1. Сделайте запрос, чтобы увидеть, есть ли точное совпадение URL
  2. Если совпадений нет, извлекаются все строки с последним символом "*" в обратном порядке (поэтому более конкретные URL имеют приоритет)
  3. Для каждой строки, если она (минус «*») совпадает с входным URL, вернуть ее
  4. Если ничего не найдено, то мы SOL

Ответы [ 2 ]

2 голосов
/ 13 декабря 2008

Вот как бы я это сделал:

SELECT * FROM mytable AS m
WHERE <input-url> = m.urlpattern
 OR <input-url> REGEXP REPLACE(m.urlpattern, '*', '.*');

REPLACE () должен заменить подстановочный знак стиля глобализации на эквивалентный подстановочный знак регулярного выражения.

0 голосов
/ 13 декабря 2008

Если я правильно понимаю, что-то вроде этого должно работать:

ВЫБРАТЬ КОАЛЕЦ (

(ВЫБЕРИТЕ из запроса, чтобы увидеть, есть ли точный URL),
(ВЫБЕРИТЕ следующее приближение),
'SOL'

)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...