gpt4 book ai didi

php - 在 MySQL 中存储带有通配符的 URL 并返回匹配项

转载 作者:行者123 更新时间:2023-11-29 20:24:31 24 4
gpt4 key购买 nike

我正在编写一个 PHP 路由器,它使用这样的查询在数据库中查找页面的 id

SELECT `id` FROM `pages` WHERE '/about/test' REGEXP `url` ORDER BY `url`

来自这样的表

id  type_id url             name    lookup  
1 0 /about/[^/]* NULL NULL
2 1 /about/company NULL NULL

因此,它在 '/about/company' 上获取 id 2,在 /about/whatever 上获取 id 1 > 在结果的第一行

我正在寻找从 MySQL 检索通配符值的最佳方法,例如传递 '/about/test' 时,获取 '/about/[^/]+' 条目的 ID 和 'test' 作为第二个参数;并在传递 '/about/company'

时仅获取 ID

简单地说,我想获取可变的列数,其中第一列返回 ID 和其他 - 按正确顺序的通配符值

最佳答案

让我假设您有一个标志来指定某些内容是通配符模式还是简单比较。

如果你想要所有匹配,你可以这样做:

SELECT `id`
FROM `pages`
WHERE '/about/test' REGEXP `url` AND url_has_wildcard = 0
UNION ALL
SELECT `id`
FROM `pages`
WHERE '/about/test' REGEXP `url` AND url_has_wildcard = 1 AND
NOT EXISTS (SELECT 1
FROM pages
WHERE '/about/test' REGEXP `url` AND url_has_wildcard = 0
);

您可以使用 - 还有什么 - 正则表达式来定义这样的标志。比如说,像这样:

WHERE '/about/test' REGEXP `url` AND
(url REGEXP '^[a-zA-Z0-9/]*$') -- or whatever the valid characters are

如果您只想返回一行,您可以这样做:

SELECT `id`
FROM `pages`
WHERE '/about/test' REGEXP `url`
ORDER BY (url REGEXP '^[a-zA-Z0-9/]*$') DESC
LIMIT 1;

关于php - 在 MySQL 中存储带有通配符的 URL 并返回匹配项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39369499/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com