我有一个带有列路径的表access_rules。 我在表格中添加了一行:
INSERT INTO access_rules (path) VALUES ('/user/search/*'), ('/user'), ('/someotherpath')
现在,我执行了一个查询:
SELECT * FROM `access_rules` where '/user/search/ddd' regexp path
我想返回/ user / search / *,但查询会同时返回'/user/search/*'
和'/user'
。
谁能告诉我为什么会那样?
答案 0 :(得分:0)
/user
与^.*/useruser.*$
相同。那就是任何可以在/user
之前或之后存在,以便匹配。
同时,/user/search/*
匹配/user/search/////
和/user/search
。可能不是你想要的。您可能希望.*
代替*
。
因为您似乎只有'前缀'匹配,我建议你改为
WHERE '...' LIKE CONCAT(path, '%')
如果/user
应该是'确切的'匹配,然后那不会起作用。在这种情况下,切换到
INSERT INTO access_rules (path)
VALUES ('/user/search/%'), -- note the change here
('/user'),
('/someotherpath')
SELECT * FROM `access_rules` where '/user/search/ddd'
LIKE path -- note LIKE, not REGEXP