【发布时间】:2019-01-20 18:24:21
【问题描述】:
我有一个 psql 数据库,其中包含两个要加入查询的表。表1(我们可以称为Articles)有两列:
-
slug - 这是网站中文章路径的名称
- 示例 1 - 'my-article-1'
- 示例 2 - 'my-article-2'
-
title - 文章的实际标题
- 示例 1 - “我的第一篇文章”
- 示例 2 -“我的第二篇文章”
表 2(我们称之为 Log)有两列,它们共同代表从服务器发回的请求响应:
-
url - 这是GET请求的url路径
- 示例 1 - '/articles/my-article1'
- 示例 2 - '/articles/my-article2'
-
status - 从服务器发回的状态码
- 示例 - '200 OK'
我想返回特定文章被请求并返回“200 OK”状态码的次数。
我的问题: 我想将 Articles.slug 变量与 where 子句中的 Log.url 变量进行匹配,但我不知道如何在正则表达式中使用变量。现在我正在努力将 slug 与路径匹配,这是我目前的代码:
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
【问题讨论】:
-
在您的示例中,您的
slug是'my-article-1',而您的url(或者是path,这是您的查询使用的?)是'/articles/my-article1'。请注意,数字前有一个破折号,一旦没有。这是她的错字还是真实数据是这样的?这可以解释为什么您的查询不起作用。如果这只是一个错字,那么当您将+替换为 Postgres 的字符串连接运算符||时,查询实际上应该可以工作。您还应该使用显式连接语法而不是隐式连接语法,您的LIKE可以替换为=。 -
我只是使用 - 将“示例 1”与实际示例分开,它实际上不在我的查询中。查看我的代码示例,了解我是如何实际进行查询的。
标签: sql postgresql sql-like