Допустим, у меня есть таблица с именем table
и у него есть столбец под названием path
формат строки в path
это как следовать
row path
1 /path1/aa/bg/c/da
2 /path1/ab/v
3 /path1/a/ba/ca
Как видите, каждый сегмент разделен символом /
,
Как отформатировать условие в where
с помощью like
так что единственная строка возвращается row 2
с 2 slashes
,
Я старался
DB::table('table')->where('path','LIKE','/path1/%/%')->get()
Но запрос выше вернет все строки из-за последнего %
, Как я могу исключить /
после последнего %
так что, запись, которая имеет символ /
после последнего %
не будет включен в результат?
если вы ищете совпадение с одним символом:
DB::table('table')->where('path','LIKE','/path1/_/_')->get()
«test%» соответствует всем символам после
% test соответствует всем символам перед
«_» соответствует одному символу
В противном случае, если длина строки, которую вы соответствуете, является переменной, вы можете использовать только регулярные выражения,
select * from table where path REGEXP '\/path1\/[a-zA-Z0-9_]+\/[a-zA-Z0-9_]+'
более общее соответствие, соответствующее специальным символам:
select * from table where path REGEXP '\/path1\/.+\/.+'
Других решений пока нет …