我有一个psql数据库,其中有两个要联接的表用于查询。表1(我们可以称为Articles)具有两列:
slug-这是网站中文章路径的名称
标题-文章的实际标题
表2(我们称为Log)有两列,它们共同代表从服务器发回的请求响应:
url-这是GET请求的url路径
状态-这是从服务器发回的状态代码
我想返回已请求特定文章并返回“ 200 OK”状态码的次数。
我的问题: 我想将Articles.slug变量与我的where子句中的Log.url变量匹配,但是我不知道如何在正则表达式中使用变量。现在,我正在努力将段塞与路径匹配,这是到目前为止的代码:
SELECT articles.title, articles.slug, log.path
FROM articles, log
WHERE log.path like '/articles/' + articles.slug
and log.status = '200 OK'
我知道我的WHERE子句不正确,这就是我要寻找的。如何将完整的log.path字符串与带有变量articles.slug的串联字符串匹配。
抱歉,如果其中任何一个不清楚或看起来很愚蠢,我是第一次学习SQL <3
答案 0 :(得分:0)
我想出了一个解决方案,它不能完全回答我的问题,但是这就是我的解决方法。
select articles.title, count(*)
from articles, log
where substring(log.path,10,100) = articles.slug
and log.status = '200 OK'
group by articles.title
答案 1 :(得分:0)
了解如何使用带有JOIN
子句的正确,明确,标准 ON
语法。您的查询应该看起来像这样:
SELECT a.title, a.slug, l.path
FROM articles a JOIN
log l
ON l.path like '/articles/' || a.slug
WHERE l.status = '200 OK';
||
是Postgres和大多数其他数据库中的串联运算符,因为它是用于字符串串联的ISO / ANSI标准运算符。