Нужно выражение MySQL RLIKE, чтобы исключить определенные строки, заканчивающиеся определенными символами - PullRequest
1 голос
/ 23 марта 2010

Итак, я работал с RLIKE, чтобы получить некоторые данные в новом приложении и в основном наслаждаться ими.

На сегодняшний день я использую запросы RLIKE для получения 3 типов результатов (файлы, каталоги и все).

Следующие запросы (и пример результатов):

**All**:

SELECT * FROM public WHERE obj_owner_id='test' AND obj_namespace 
RLIKE '^user/test/public/[-0-9a-z_./]+$' ORDER BY obj_namespace

user/test/public/a-test/.comment
user/test/public/a-test/.delete
user/test/public/directory/
user/test/public/directory/image.jpg
user/test/public/index
user/test/public/site-rip
user/test/public/site-rip2
user/test/public/test-a
user/test/public/widget-test

**Files**:

SELECT * FROM public WHERE obj_owner_id='test' AND obj_namespace 
RLIKE '^user/test/public/[-0-9a-z_./]+[-0-9a-z_.]+$' ORDER BY obj_namespace


user/test/public/a-test/.comment
user/test/public/a-test/.delete
user/test/public/directory/image.jpg
user/test/public/index
user/test/public/site-rip
user/test/public/site-rip2
user/test/public/test-a
user/test/public/widget-test

**Directories**:

SELECT * FROM public WHERE obj_owner_id='test' AND obj_namespace 
RLIKE '^user/test/public/[-0-9a-z_./]+/$' ORDER BY obj_namespace

user/test/public/directory/

Это хорошо работает для вышеуказанных 3 основных сценариев, но в определенных ситуациях я буду включать специальные «суффиксы», которые я хотел бы исключить из результатов запросов (без необходимости прибегать к функциям PHP для этого).

Хороший пример такой строки:

user/test/public/a-test/.delete

Эти данные (строк больше, чем просто obj_namespace) считаются удаленными, и в запросах типа Files и All я бы хотел, чтобы их было по возможности опущено в выражении .

То же самое относится к /.comments, и все такие метаданные всегда будут в одном формате:

/.[sometext]

Я надеялся широко использовать эту функцию в своем приложении, поэтому надеюсь, что ответ может быть очень простым. ( скрещивает пальцы )

В любом случае, спасибо как всегда за любые / все ответы и отзывы.

1 Ответ

0 голосов
/ 23 марта 2010

Похоже, вы могли бы просто добавить еще одно условие к каждому запросу:

... AND obj_namespace NOT RLIKE '/[.][a-z]+$' ...
...