PHP + MySQL:使用通配符搜索

时间:2008-12-13 04:22:27

标签: php mysql optimization

所以,我在DB中有以下行:

1 | /用户/

2 | /用户/管理员/

3 | /用户/管理员/ *

4 | /用户/管理员/麦克风/

5 | /用户/管理员/史蒂夫/文档/

输入网址为 / users / admin / steve / ,目标是从数据库中找到网址匹配。

我想将#3作为正确的行返回,因为通配符“*”指定任何东西都可以代替星号。这样做最有效的方法是什么?

这是我最初的想法,但我相信它们可以改进:

  1. 查询是否存在确切的网址匹配
  2. 如果没有匹配,则以相反的顺序检索所有以“*”作为最后一个字符的行(因此更具体的URL优先)
  3. 对于每一行,如果它(减去“*”)与输入的URL匹配,则返回
  4. 如果找不到任何内容,那么我们就是SOL

2 个答案:

答案 0 :(得分:2)

我是这样做的:

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

REPLACE()用于将globbing样式的通配符更改为等效的正则表达式通配符。

答案 1 :(得分:0)

如果我理解正确,这样的事情应该有效:

SELECT COALESCE(

  

(从您的查询中选择任何内容以查看是否有确切的网址),
    (选择下一个近似值),
    'SOL'