PHP + MySQL: поиск с использованием подстановочных знаков

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

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

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

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

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

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

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

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

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

  1. Сделайте запрос, чтобы увидеть, есть ли точное совпадение URL
  2. Если совпадений нет, то извлекаются все строки с «*» в качестве последнего символа в обратном порядке (поэтому более конкретные URL имеют приоритет)
  3. Для каждой строки, если она (минус «*») соответствует входному URL, тогда верните ее
  4. Если ничего не найдено, то мы SOL
13.12.2008 04:22:26
2 ОТВЕТА
РЕШЕНИЕ

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

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

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

2
13.12.2008 04:29:19

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

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

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

)

0
13.12.2008 04:27:58